Bagikan melalui


Tutorial: Menambahkan masuk dan keluar di aplikasi satu halaman Angular Anda

Berlaku untuk: Lingkaran hijau dengan simbol tanda centang putih. Penyewa tenaga kerja Lingkaran hijau dengan simbol tanda centang putih. Penyewa eksternal (pelajari selengkapnya)

Tutorial ini adalah bagian 2 dari seri yang menunjukkan pembuatan aplikasi satu halaman (SPA) Angular dan menambahkan autentikasi menggunakan platform identitas Microsoft. Di Bagian 1 dari seri ini, Anda membuat Angular SPA dan menambahkan konfigurasi awal.

Di tutorial ini, Anda akan:

  • Menambahkan opsi masuk dan keluar

Prasyarat

Menambahkan fungsionalitas masuk dan keluar ke aplikasi Anda

Di bagian ini Anda akan menambahkan komponen untuk mendukung fungsionalitas masuk dan keluar di aplikasi Angular Anda. Komponen-komponen ini memungkinkan pengguna untuk mengautentikasi dan mengelola sesi mereka. Anda akan menambahkan routing ke aplikasi untuk mengarahkan pengguna ke komponen yang sesuai berdasarkan status otentikasi mereka.

Untuk mengaktifkan fungsionalitas masuk dan keluar di aplikasi Angular Anda, ikuti langkah-langkah berikut:

  1. src/app/app.component.html Buka file dan ganti konten dengan kode berikut.

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

    Kode mengimplementasikan bilah navigasi di aplikasi Angular. Ini secara dinamis menampilkan tombol Masuk dan Keluar berdasarkan status autentikasi pengguna dan menyertakan tombol Lihat Profil untuk pengguna yang masuk, meningkatkan antarmuka pengguna aplikasi. Metode login() dan logout() di src/app/app.component.ts dipanggil ketika tombol dipilih.

  2. src/app/app-routing.module.ts Buka file dan ganti konten dengan kode berikut.

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

    Cuplikan kode mengonfigurasi perutean dalam aplikasi Angular dengan membuat jalur untuk komponen Profil dan Rumah . Menggunakan MsalGuard untuk menerapkan autentikasi di rute Profil, sementara semua jalur yang tidak sesuai dialihkan ke Beranda komponen.

  3. src/app/home/home.component.ts Buka file dan ganti konten dengan kode berikut.

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

    Kode menyiapkan komponen Angular yang disebut HomeComponent yang terintegrasi dengan Microsoft Authentication Library (MSAL). Dalam kait siklus hidup ngOnInit, komponen berlangganan ke observable msalSubject$ dari MsalBroadcastService, memfilter peristiwa ketika login berhasil. Ketika terjadi peristiwa masuk, hasil autentikasi diambil dan akun aktif di-setel di MsalService, memungkinkan aplikasi untuk mengelola sesi pengguna.

  4. src/app/home/home.component.html Buka file dan ganti konten dengan kode berikut.

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

    Kode ini menyambut pengguna ke aplikasi dan meminta mereka untuk melihat data Microsoft Graph mereka dengan mengklik tautan Tampilkan Profil .

  5. src/main.ts Buka file dan ganti konten dengan kode berikut.

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

    Cuplikan kode mengimpor platformBrowserDynamic dari modul dinamis browser platform Angular dan AppModule dari file modul aplikasi. Kemudian menggunakan platformBrowserDynamic() untuk bootstrap AppModule, menginisialisasi aplikasi Angular. Setiap kesalahan yang terjadi selama proses bootstrap ditangkap dan dicatat ke konsol.

  6. src/index.html Buka file dan ganti konten dengan kode berikut.

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

    Cuplikan kode mendefinisikan dokumen HTML5 dengan bahasa Inggris sebagai bahasa dan pengodean karakter UTF-8. Ini mengatur judul ke "MSAL Untuk JavaScript - Angular SPA." Isi mencakup <app-root> komponen sebagai titik masuk utama dan <app-redirect> komponen untuk fungsionalitas pengalihan.

  7. src/styles.css Buka file dan ganti konten dengan kode berikut.

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

    Kode CSS menata halaman web dengan mengatur font isi ke tumpukan sans-serif modern, menghapus margin default, dan menerapkan penghalusan font untuk keterbacaan yang ditingkatkan. Ini memusatkan teks dan menambahkan padding ke kelas .app, .title, dan .profile, sementara kelas .profileButton menggunakan flexbox untuk memusatkan elemennya.

Langkah berikutnya