Condividi tramite


Esercitazione: Aggiungere accesso e uscita nella tua applicazione a pagina singola Angular

Si applica a: Cerchio verde con un simbolo di spunta bianco che indica che il contenuto seguente si applica ai tenant della forza lavoro. I tenant della forza lavoro Cerchio verde con un simbolo di spunta bianco che indica che il contenuto seguente si applica ai tenant esterni. I tenant esterni (Altre informazioni)

Questa esercitazione è la parte 2 di una serie che illustra la creazione di un'applicazione a pagina singola Angular e l'aggiunta dell'autenticazione tramite Microsoft Identity Platform. Nella parte 1 di questa serie è stata creata un'applicazione a pagina singola Angular e sono state aggiunte le configurazioni iniziali.

In questa esercitazione, farai:

  • Aggiungi accedere e disconnettersi

Prerequisiti

Aggiungere la funzionalità di accesso e disconnessione all'app

In questa sezione verranno aggiunti componenti per supportare la funzionalità di accesso e disconnessione nell'applicazione Angular. Questi componenti consentono agli utenti di autenticare e gestire le sessioni. Si aggiungerà il routing all'applicazione per indirizzare gli utenti ai componenti appropriati in base al relativo stato di autenticazione.

Per abilitare la funzionalità di accesso e disconnesso nell'applicazione Angular, seguire questa procedura:

  1. Aprire il file src/app/app.component.html e sostituirne il contenuto con il codice seguente.

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

    Il codice implementa una barra di spostamento in un'app Angular. Visualizza dinamicamente i pulsanti Accedi e Disconnetti in base allo stato di autenticazione utente e include un pulsante Visualizza profilo per gli utenti connessi, migliorando l'interfaccia utente dell'applicazione. I metodi login() e logout() in src/app/app.component.ts vengono chiamati quando i pulsanti vengono selezionati.

  2. Aprire il file src/app/app-routing.module.ts e sostituirne il contenuto con il codice seguente.

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

    Il frammento di codice configura il routing in un'applicazione Angular stabilendo i percorsi per i componenti Profilo e Home . Usa MsalGuard per applicare l'autenticazione sul percorso Profile, mentre tutti i percorsi non riconosciuti vengono reindirizzati al componente Home.

  3. Aprire il file src/app/home/home.component.ts e sostituirne il contenuto con il codice seguente.

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

    Il codice configura un componente Angular denominato HomeComponent che si integra con Microsoft Authentication Library (MSAL). Nell'hook del ngOnInit ciclo di vita, il componente si sottoscrive all'osservabile di msalSubject$, filtrando gli eventi di successo del loginMsalBroadcastService. Quando si verifica un evento di accesso, recupera il risultato dell'autenticazione e imposta l'account attivo in MsalService, consentendo all'applicazione di gestire le sessioni utente.

  4. Aprire il file src/app/home/home.component.html e sostituirne il contenuto con il codice seguente.

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

    Il codice accoglie gli utenti nell'app e chiede loro di visualizzare i dati di Microsoft Graph facendo clic sul collegamento Visualizza profilo .

  5. Aprire il file src/main.ts e sostituirne il contenuto con il codice seguente.

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

    Il frammento di codice importa platformBrowserDynamic dal modulo dinamico del browser della piattaforma Angular e AppModule dal file del modulo dell'applicazione. Viene quindi usato platformBrowserDynamic() per eseguire il bootstrap dell'oggetto AppModule, inizializzando l'applicazione Angular. Tutti gli errori che si verificano durante il processo di bootstrap vengono rilevati e registrati nella console.

  6. Aprire il file src/index.html e sostituirne il contenuto con il codice seguente.

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

    Il frammento di codice definisce un documento HTML5 con inglese come lingua e codifica dei caratteri UTF-8. Imposta il titolo su "MSAL per JavaScript - Angular SPA". Il corpo include il <app-root> componente, come punto di ingresso principale, e il <app-redirect> componente per le funzionalità di reindirizzamento.

  7. Aprire il file src/styles.css e sostituirne il contenuto con il codice seguente.

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

    Il codice CSS stilizza la pagina Web impostando il tipo di carattere del corpo su uno stack sans-serif moderno, rimuovendo i margini predefiniti e applicando lo smussamento del carattere per migliorare la leggibilità. Centra il testo e aggiunge spaziatura interna alle .appclassi , .titlee .profile , mentre la .profileButton classe usa flexbox per centrarne gli elementi.

Passaggio successivo