Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: 
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
- Slutför förkunskapskraven och stegen i Självstudie: Skapa en enkelsidig Angular-applikation
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:
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()ochlogout()isrc/app/app.component.tsanropas när knapparna väljs.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
MsalGuardför att framtvinga autentisering på profilvägen , medan alla omatchade sökvägar omdirigeras till hemkomponenten .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
HomeComponentsom integreras med Microsoft Authentication Library (MSAL). I livscykelkroken prenumererar komponenten pångOnInitobservable frånmsalSubject$, som filtrerar händelser för lyckade inloggningar. När en inloggningshändelse inträffar hämtar den autentiseringsresultatet och anger det aktiva kontot iMsalService, vilket gör att programmet kan hantera användarsessioner.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 .
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
platformBrowserDynamicfrån Angulars dynamiska modul för plattformswebbläsaren ochAppModulefrån programmets modulfil. Den använderför att bootstrap , vilket initierar Angular-applikationen. Eventuella fel som uppstår under bootstrap-processen fångas upp och loggas till konsolen. 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.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.profilemedan.profileButtonklassen använder flexbox för att centrera sina element.