我使用Google身份驗證成功登錄和註銷,但我的身份驗證服務未返回登錄狀態。我試圖在我的Auth Guard中讀取它以確定我是否應該直接進入登錄頁面。我得到_googleAuth
未定義的錯誤(「TypeError:無法讀取未定義的屬性'isSignedIn'」)。Angular 2從服務獲取Google身份驗證狀態
constructor(private router: Router, private _authService: AuthenticationService) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this._authService.getAuthenticatedStatusAsObservable()
.map((result) => { ...
的描述性的命名服務方法是這樣的:
getAuthenticatedStatusAsObservable(): Observable<boolean> {
if(this._googleAuth){
return Observable.of(this._googleAuth.isSignedIn.get());
}
else {return Observable.of(false) }
}
}
其他服務方法的工作。例如,我可以寫出用戶名。但是,當我試圖獲取狀態(或用戶名)作爲可觀察的,它不起作用。
爲什麼在構造函數中沒有足夠的認證服務?我假設我錯過了使用observables的東西。
loadAuth()被調用的服務的構造函數:
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));
});
}
顯示你是如何初始化'this._googleAuth'的? –
@RomanC添加了它。 thx – beachCode
它的前三行失敗了,你應該調試。對不起,這是題外話 –