2017-10-18 3 views
1

Soweit ich es verstehe, ist die Schnittstelle CanActivate in Angular2 nur bei Routenänderungen wirksam. Also, wenn ich eine Seite p, dass der Benutzer angemeldet sein, erfordert in ich eine Wache erstellen kann, die den CanActivate-Schnittstelle implementiert, die die RouterModule ermöglichen p nur zu aktivieren, wenn der Benutzer angemeldet ist.Angular2-Trigger CanActivate, während die Seite aktiv ist

Aber Was passiert, wenn p aktiv ist und der Benutzer abgemeldet wird? Ich habe versucht, Best Practices zu finden, um zu überprüfen, ob eine Seite aktiv sein darf, ohne die Route im RouterModul zu ändern, aber ich kann nichts Nützliches finden. Nehmen wir an, die Seite p ist aktiv und erfordert eine Anmeldung. Jetzt wird eine Abmeldung irgendwie ausgelöst, während p aktiv ist, aber keine Routenänderung involviert ist. Nehmen wir an, der Server antwortet mit einem 401 und die App bemerkt, dass der Benutzer nicht mehr angemeldet ist. Was wäre die beste Vorgehensweise, um zu überprüfen, ob die aktive Seite eine Anmeldung erfordert, und entsprechende Maßnahmen zu ergreifen? Es kann sein, dass die aktive Seite keine Anmeldung benötigt. In diesem Fall sollte alles so bleiben wie es ist.

Antwort

1

Sie data mit Ihren Routen hinzufügen können, die Sie später verwenden können, wenn überprüfen Authentifizierung für diese Route oder nicht, erforderlich ist

so etwas wie unten,

{ 
    path: ..., 
    component: ..., 
    canActivate: [CanActivateGuard], 
    data: { authRequired: true } 
} 

im Abmelde Trigger, Sie kann ActivatedRoute injizieren auf den aktivierten Routen Daten zu überprüfen, um festzustellen, ob Sie den Benutzer senden möchten Seite oder nicht anmelden,

constructor(route: ActivatedRoute) {} 
... 
someCallBack(){ 
    if(!!this.route.snapshot.data 
    && this.route.snapshot.data.authRequired == true){ 

    // redirect to login page 

    } 
} 

Hoffe das hilft !!

Verwandte Themen