Kommentar
Å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.
Angular Universal stöds minimalt i @azure/msal-angular. Eftersom @azure/msal-angular är ett wrapper-bibliotek för @azure/msal-browser, som använder globala objekt som bara finns i webbläsaren, till exempel window och location, är inte alla funktioner i @azure/msal-angular tillgängliga vid användning av Angular Universal. Även om inloggning och hämtning av token inte stöds på serversidan kan Angular Universal användas tillsammans med @azure/msal-angular utan att din app slutar fungera.
Se instruktionerna i Angular-dokumentationen om hur du installerar Angular Universal i en befintlig applikation, samt för mer information om globala objekt som endast finns i webbläsaren.
Note
MSAL Angular har inte officiellt stöd för funktioner på serversidan och prerendering. Att använda SSR med MSAL Angular kan göra att appen slutar fungera.
Om du vill använda @azure/msal-angular med Angular Universal gör du följande justeringar:
Ta bort referenser till objekt som endast finns i webbläsare. Vårt Exempel på Angular-moduler har kommentarer bredvid relevanta rader som ska tas bort för att återge serversidan. Om du tar bort dessa rader påverkas inte exempelappen om du använder Angular Universal.
this.isIframe = window !== window.parent && !window.opener; // Remove this line to use Angular UniversalDu kan också lägga till kontroller före alla rader som endast använder globala objekt i webbläsaren.
if (typeof window !== "undefined") { this.isIframe = window !== window.parent && !window.opener; }Samma kontroll bör läggas till i alla HTTP-anrop som görs av din app, eftersom
MsalInterceptorför närvarande endast använder objekt som är tillgängliga i webbläsaren. Detta kommer att åtgärdas i en framtida korrigering. Se exemplet nedan i profile.component.ts från vår äldre MSAL Angular v2 Angular 11-exempelapp: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; }); } }Kontrollera att appen inte använder hash-routning. Standarddirigeringsstrategin för den äldre MSAL Angular v2 Angular 11-exempelappen är hash-routning, så se
useHashtill attfalseär inställd på i app-routing.module.ts:@NgModule({ imports: [RouterModule.forRoot(routes, { useHash: false, initialNavigation: 'enabled' })], exports: [RouterModule] }) export class AppRoutingModule { }