ich hatte ein ähnliches Problem und löste es einen Authentifizierungs-Service, wo ich stattdessen ein BehaviorSubject verwendet, um das Element Authentifizierungsstatus zu verfolgen:
public member: Subject<Member> = new Subject<Member>();
private _cachedMember: Member;
private _member$: BehaviorSubject<Member>;
constructor(private _http: Http, private _router: Router) {
}
get member$(): Observable<Member> {
if (!this._cachedMember) {
this.getAuthorizedMember().subscribe();
}
return this._member$.asObservable();
}
private getAuthorizedMember(): Observable<Member> {
// call your auth API and set _cachedMember accordingly:
this._cachedMember = member;
this._member$.next(this._cachedMember);
}
Meine auth.guard.ts canActivate Umsetzung:
Die Else-Anweisung speichert die URL-Anforderung, sodass das Mitglied nach der Anmeldung korrekt umgeleitet wird.
Dann müssen Sie nur Ihre Authentifizierungs-API aufrufen, wenn _cachedMember null ist. Denken Sie daran, _cachedMember beim Abmelden auf null zu setzen und die Betreffenden zu informieren.
logout() {
this._cachedMember = null;
this._member$.next(this._cachedMember);
}
[EDIT] fand ich ein Problem mit der früheren Lösung. Es ist eine gute Idee, den Autorisierungsmechanismus in eine Observable zu verpacken und eine Nullprüfung durchzuführen, wenn der Betreff _member $ zugewiesen ist. Dann ist der Anfangszustand gültig, wenn direkt zu einer überwachten Route navigiert wird!
Alles, was Sie in der Benutzerseite speichern vom Benutzer bearbeitet werden. Also sollten Sie in jeder Seitenansicht eine neue Anfrage senden. – mohammad
Was ist die Frage? –
@DanielCooke Wenn ich mich nicht irre, hat Jordan einen Wächter, in dem er einen Ajax-Anruf tätigt, um einen Benutzer zu bekommen. Danach wird eine Komponente geladen und in der Komponente führt er einen zweiten Ajax-Aufruf durch, um einen Benutzer zu erhalten. Frage: Wie mache ich das mit nur einem Anruf? –