Dela via


Självstudie: Lägga till inloggning och utloggning i angular-ensidesprogrammet

Gäller för: Grön cirkel med en vit bockmarkeringssymbol som anger att följande innehåll gäller för personalklienter.Personalklienter Grön cirkel med en vit bockmarkeringssymbol som anger att följande innehåll gäller för externa klienter. Externa klienter (läs mer)

Den här självstudien är del 2 i en serie som visar hur du skapar ett Angular-ensidesprogram (SPA) och lägger till autentisering med hjälp av Microsofts identitetsplattform. I del 1 i den här serienskapade du ett Angular SPA och lade till inledande konfigurationer.

I den här handledningen kommer du att:

  • Lägga till inloggning och utloggning

Förutsättningar

Lägga till inloggnings- och utloggningsfunktioner i din app

I det här avsnittet lägger du till komponenter som stöder inloggnings- och utloggningsfunktioner i ditt Angular-program. Med de här komponenterna kan användarna autentisera och hantera sina sessioner. Du lägger till routning till programmet för att dirigera användare till lämpliga komponenter baserat på deras autentiseringsstatus.

Om du vill aktivera inloggnings- och utloggningsfunktioner i ditt Angular-program följer du dessa steg:

  1. src/app/app.component.html Öppna filen och ersätt innehållet med följande kod.

    <a class="navbar navbar-dark bg-primary" variant="dark" href="/">
        <a class="navbar-brand"> Microsoft Identity Platform </a>
        <a>
            <button *ngIf="!loginDisplay" class="btn btn-secondary" (click)="login()">Sign In</button>
            <button *ngIf="loginDisplay" class="btn btn-secondary" (click)="logout()">Sign Out</button>
        </a>
    </a>
    <a class="profileButton">
        <a [routerLink]="['profile']" class="btn btn-secondary" *ngIf="loginDisplay">View Profile</a> 
    </a>
    <div class="container">
        <router-outlet></router-outlet>
    </div>
    

    Koden implementerar ett navigeringsfält i en Angular-app. Den visar knappar för inloggning och utloggning dynamiskt baserat på användarautentiseringsstatus och innehåller knappen Visa profil för inloggade användare, vilket förbättrar programmets användargränssnitt. Metoderna login() och logout() i src/app/app.component.ts anropas när knapparna väljs.

  2. src/app/app-routing.module.ts Öppna filen och ersätt innehållet med följande kod.

    // Required for Angular
    import { NgModule } from '@angular/core';
    
    // Required for the Angular routing service
    import { Routes, RouterModule } from '@angular/router';
    
    // Required for the "Profile" page
    import { ProfileComponent } from './profile/profile.component';
    
    // Required for the "Home" page
    import { HomeComponent } from './home/home.component';
    
    // MsalGuard is required to protect routes and require authentication before accessing protected routes
    import { MsalGuard } from '@azure/msal-angular';
    
    // Define the possible routes
    // Specify MsalGuard on routes to be protected
    // '**' denotes a wild card
    const routes: Routes = [
      {
        path: 'profile',
        component: ProfileComponent,
        canActivate: [
          MsalGuard
        ]
      },
      {
        path: '**',
        component: HomeComponent
      }
    ];
    
    // Create an NgModule that contains all the directives for the routes specified above
    @NgModule({
      imports: [RouterModule.forRoot(routes, {
        useHash: true
      })],
      exports: [RouterModule]
    })
    export class AppRoutingModule { }
    

    Kodfragmentet konfigurerar routning i ett Angular-program genom att upprätta sökvägar för profil- och startkomponenterna. Den använder MsalGuard för att framtvinga autentisering på profilvägen , medan alla omatchade sökvägar omdirigeras till hemkomponenten .

  3. src/app/home/home.component.ts Öppna filen och ersätt innehållet med följande kod.

    // Required for Angular
    import { Component, OnInit } from '@angular/core';
    
    // Required for MSAL
    import { MsalBroadcastService, MsalService } from '@azure/msal-angular';
    
    // Required for Angular multi-browser support
    import { EventMessage, EventType, AuthenticationResult } from '@azure/msal-browser';
    
    // Required for RJXS observables
    import { filter } from 'rxjs/operators';
    
    @Component({
      selector: 'app-home',
      templateUrl: './home.component.html'
    })
    export class HomeComponent implements OnInit {
      constructor(
        private authService: MsalService,
        private msalBroadcastService: MsalBroadcastService
      ) { }
    
      // Subscribe to the msalSubject$ observable on the msalBroadcastService
      // This allows the app to consume emitted events from MSAL
      ngOnInit(): void {
        this.msalBroadcastService.msalSubject$
          .pipe(
            filter((msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS),
          )
          .subscribe((result: EventMessage) => {
            const payload = result.payload as AuthenticationResult;
            this.authService.instance.setActiveAccount(payload.account);
          });
      }
    }
    

    Koden konfigurerar en Angular-komponent med namnet HomeComponent som integreras med Microsoft Authentication Library (MSAL). I livscykelkroken prenumererar komponenten på ngOnInit observable från msalSubject$, som filtrerar händelser för lyckade inloggningar. När en inloggningshändelse inträffar hämtar den autentiseringsresultatet och anger det aktiva kontot i MsalService, vilket gör att programmet kan hantera användarsessioner.

  4. src/app/home/home.component.html Öppna filen och ersätt innehållet med följande kod.

    <div class="title">
        <h5>
            Welcome to the Microsoft Authentication Library For JavaScript - Angular SPA
        </h5>
        <p >View your data from Microsoft Graph by clicking the "View Profile" link above.</p>
    </div>
    

    Koden välkomnar användare till appen och uppmanar dem att visa sina Microsoft Graph-data genom att klicka på länken Visa profil .

  5. src/main.ts Öppna filen och ersätt innehållet med följande kod.

    import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
    
    import { AppModule } from './app/app.module';
    
    platformBrowserDynamic().bootstrapModule(AppModule)
      .catch(err => console.error(err));
    

    Kodfragmentet importeras platformBrowserDynamic från Angulars dynamiska modul för plattformswebbläsaren och AppModule från programmets modulfil. Den använder för att bootstrap , vilket initierar Angular-applikationen. Eventuella fel som uppstår under bootstrap-processen fångas upp och loggas till konsolen.

  6. src/index.html Öppna filen och ersätt innehållet med följande kod.

    <!doctype html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <title>MSAL For JavaScript - Angular SPA</title>
      </head>
      <body>
        <app-root></app-root>
        <app-redirect></app-redirect>
      </body>
    </html>
    

    Kodfragmentet definierar ett HTML5-dokument med engelska som språk- och UTF-8-teckenkodning. Den anger rubriken till "MSAL For JavaScript – Angular SPA". Brödtexten innehåller komponenten <app-root> som huvudinmatningspunkt och <app-redirect> komponenten för omdirigeringsfunktioner.

  7. src/styles.css Öppna filen och ersätt innehållet med följande kod.

    body {
      margin: 0;
      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
        'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
        sans-serif;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }
    
    code {
      font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
        monospace;
    }
    
    .app {
      text-align: center;
      padding: 8px;
    }
    
    .title{
      text-align: center;
      padding: 18px;
    }
    
    
    .profile{
      text-align: center;
      padding: 18px;
    }
    
    .profileButton{
      display: flex;
      justify-content: center;
      padding: 18px;
    }
    

    CSS-koden formatmallar webbsidan genom att ange brödtexten till en modern sans-serif-stack, ta bort standardmarginaler och tillämpa teckensnittsutjämning för förbättrad läsbarhet. Den centrerar text och lägger till utfyllnad i klasserna .app, .titleoch .profile medan .profileButton klassen använder flexbox för att centrera sina element.

Nästa steg