Sdílet prostřednictvím


Návod: Přidání přihlášení a odhlášení do vaší jednostránkové aplikace Angular

Platí pro: Zelený kruh se symbolem bílé značky zaškrtnutí, který označuje následující obsah platí pro tenanty pracovních sil. Tenanti pracovních sil zelený kruh se symbolem bílé značky zaškrtnutí, který označuje následující obsah platí pro externí tenanty. Externí tenanti (další informace)

Tento kurz je druhou částí série, která ukazuje vytvoření jednostránkové aplikace Angular (SPA) a přidání ověřování pomocí platformy Microsoft Identity Platform. V 1. části této sériejste vytvořili Angular SPA a přidali jste počáteční konfigurace.

V tomto kurzu se naučíte:

  • Přidejte přihlášení a odhlášení

Požadavky

Přidání funkce přihlášení a odhlášení do aplikace

V této části přidáte komponenty pro podporu funkcí přihlašování a odhlášení v aplikaci Angular. Tyto komponenty umožňují uživatelům ověřovat a spravovat relace. Do aplikace přidáte směrování, které uživatele nasměruje na příslušné komponenty na základě jejich stavu ověřování.

Pokud chcete ve své aplikaci Angular povolit funkci přihlášení a odhlášení, postupujte takto:

  1. src/app/app.component.html Otevřete soubor a nahraďte obsah následujícím kódem.

    <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>
    

    Kód implementuje navigační panel v aplikaci Angular. Dynamicky zobrazuje tlačítka Přihlásit se a Odhlásit se na základě stavu ověřování uživatele a obsahuje tlačítko Zobrazit profil pro přihlášené uživatele a vylepšuje uživatelské rozhraní aplikace. Metody login() a logout() v src/app/app.component.ts jsou volány, když jsou tlačítka vybrána.

  2. src/app/app-routing.module.ts Otevřete soubor a nahraďte obsah následujícím kódem.

    // 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 { }
    

    Fragment kódu konfiguruje směrování v aplikaci Angular vytvořením cest pro součásti Profile a Home . Používá MsalGuard k vynucení ověřování na trase Profil, zatímco všechny nesouladné cesty jsou přesměrovány na komponentu Domov.

  3. src/app/home/home.component.ts Otevřete soubor a nahraďte obsah následujícím kódem.

    // 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);
          });
      }
    }
    

    Kód nastaví komponentu Angular, HomeComponent která se integruje s knihovnou MSAL (Microsoft Authentication Library). ngOnInit V háku životního cyklu se komponenta přihlásí k odběru msalSubject$ pozorovatelných událostí z MsalBroadcastService, filtrování událostí úspěšného přihlášení. Když dojde k události přihlášení, načte výsledek ověřování a nastaví aktivní účet v aplikaciMsalService, čímž umožní aplikaci spravovat uživatelské relace.

  4. src/app/home/home.component.html Otevřete soubor a nahraďte obsah následujícím kódem.

    <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>
    

    Kód vítá uživatele v aplikaci a vyzve je k zobrazení dat Microsoft Graphu kliknutím na odkaz Zobrazit profil .

  5. src/main.ts Otevřete soubor a nahraďte obsah následujícím kódem.

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

    Fragment kódu importuje platformBrowserDynamic z dynamického modulu platformy prohlížeče Angular a AppModule ze souboru modulu aplikace. Pak se použije platformBrowserDynamic() k zavedení AppModule, čímž se inicializuje aplikace Angular. Všechny chyby, ke kterým dojde během procesu bootstrap, se zachytí a zaprotokolují do konzoly.

  6. src/index.html Otevřete soubor a nahraďte obsah následujícím kódem.

    <!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>
    

    Fragment kódu definuje dokument HTML5 s angličtinou jako jazyk a kódování znaků UTF-8. Nastaví název na "MSAL For JavaScript - Angular SPA." Tělo obsahuje komponentu <app-root> jako hlavní vstupní bod a komponentu <app-redirect> s funkcemi pro přesměrování.

  7. src/styles.css Otevřete soubor a nahraďte obsah následujícím kódem.

    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 kód stylizuje webovou stránku nastavením základního písma na moderní sadu bezpatkových písem, odstraněním výchozích okrajů a použitím vyhlazování písma pro lepší čitelnost. Zacentruje text a přidává odsazení do .app, .title a .profile tříd, zatímco .profileButton třída používá flexbox k vystředění svých prvků.

Další krok