Je me connecte avec succès à l'aide de l'authentification Google, mais mon service d'authentification ne renvoie pas le statut de connexion. J'essaye de le lire dans mon garde d'autorisation pour déterminer si je devrais diriger à la page de connexion. J'obtiens l'erreur que _googleAuth
est undefined ("TypeError: Impossible de lire la propriété 'isSignedIn' de undefined").Angular 2 obtenant l'état d'authentification Google à partir d'un service
constructor(private router: Router, private _authService: AuthenticationService) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this._authService.getAuthenticatedStatusAsObservable()
.map((result) => { ...
La méthode de service nommé descriptivement ressemble à ceci:
getAuthenticatedStatusAsObservable(): Observable<boolean> {
if(this._googleAuth){
return Observable.of(this._googleAuth.isSignedIn.get());
}
else {return Observable.of(false) }
}
}
D'autres méthodes de service fonctionnent. Je peux écrire le nom d'utilisateur par exemple. Cependant, lorsque j'essaie d'obtenir le statut (ou le nom d'utilisateur) comme observable, cela ne fonctionne pas.
Pourquoi le service d'authentification du constructeur n'est-il pas suffisant? Je suppose qu'il me manque quelque chose sur l'utilisation des observables.
loadAuth() est appelée dans le constructeur de service:
loadAuth() {
// attempt to SILENT authorize
this.gapiLoad
.load('auth2')
.switchMap(() => this.authorize())
.do((googleAuth: gapi.auth2.GoogleAuth) => this.saveGoogleAuth(googleAuth))
.do((googleAuth: gapi.auth2.GoogleAuth) => this.listenToGoogleAuthSignIn(googleAuth))
.filter((googleAuth: gapi.auth2.GoogleAuth) => this.isSignedIn())
.filter((googleAuth: gapi.auth2.GoogleAuth) => this.hasAccessToken(googleAuth))
.map((googleAuth: gapi.auth2.GoogleAuth) => googleAuth.currentUser.get())
.subscribe((googleUser: gapi.auth2.GoogleUser) => {
this.zone.run(() => this.handleSuccessLogin(googleUser));
});
}
Comment avez-vous initialisé 'this._googleAuth'? –
@RomanC l'a ajouté. thx – beachCode
il échoue quelque part sur les trois premières lignes, vous devriez déboguer. Désolé c'est hors sujet –