Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Angular Universal hanya didukung secara minimal di @azure/msal-angular. Karena @azure/msal-angular merupakan pustaka pembungkus untuk @azure/msal-browser, yang menggunakan objek global yang hanya tersedia di browser seperti objek window dan location, tidak semua fitur @azure/msal-angular tersedia saat menggunakan Angular Universal. Meskipun proses login dan perolehan token tidak didukung di sisi server, Angular Universal dapat digunakan dengan @azure/msal-angular tanpa merusak aplikasi Anda.
Silakan lihat instruksi dari dokumen Angular tentang cara menginstal Angular Universal dengan aplikasi yang ada, dan untuk informasi lebih lanjut tentang objek global khusus browser.
Note
MSAL Angular tidak secara resmi mendukung kemampuan server-side dan prarendering. Menggunakan SSR dengan MSAL Angular dapat merusak aplikasi Anda.
Untuk digunakan @azure/msal-angular dengan Angular Universal, lakukan penyesuaian berikut:
Hapus referensi ke objek khusus browser. Contoh Modul Angular kami memiliki komentar di samping baris-baris yang relevan yang harus dihapus agar dapat dirender di sisi server. Menghapus baris ini tidak akan memengaruhi aplikasi sampel jika menggunakan Angular Universal.
this.isIframe = window !== window.parent && !window.opener; // Remove this line to use Angular UniversalSebagai alternatif, pemeriksaan dapat ditambahkan sebelum setiap baris yang menggunakan objek global yang hanya tersedia di browser.
if (typeof window !== "undefined") { this.isIframe = window !== window.parent && !window.opener; }Pemeriksaan yang sama harus ditambahkan ke panggilan HTTP apa pun yang dilakukan oleh aplikasi Anda, karena
MsalInterceptorsaat ini menggunakan objek khusus browser. Ini akan ditangani dalam perbaikan di masa mendatang. Lihat contoh di bawah ini di profile.component.ts dari aplikasi sampel MSAL Angular v2 Angular 11 kami yang lebih lama:export class ProfileComponent implements OnInit { profile!: ProfileType; constructor( private http: HttpClient ) { } ngOnInit() { // This check is added to ensure HTTP calls are made client-side if (typeof window !== "undefined") { this.getProfile(); } } getProfile() { this.http.get(GRAPH_ENDPOINT) .subscribe(profile => { this.profile = profile; }); } }Pastikan aplikasi Anda tidak menggunakan perutean berbasis hash. Strategi perutean bawaan untuk aplikasi sampel MSAL Angular v2 Angular 11 versi lama adalah perutean hash, jadi pastikan
useHashdiatur kefalsedalam app-routing.module.ts:@NgModule({ imports: [RouterModule.forRoot(routes, { useHash: false, initialNavigation: 'enabled' })], exports: [RouterModule] }) export class AppRoutingModule { }