2
我創建了一個authguard來防止沒有登錄的用戶進入一個頁面。 authguard運行並返回true後,它不會重定向到相應的頁面。難道我做錯了什麼?Angular2 Authguard重定向路由不工作
@Injectable()
export class AuthGuard implements CanActivate {
constructor(
private authStatusService: AuthStatusService,
private authService: AuthService,
private router: Router) { }
canActivate(): any {
return this.authStatusService.authStatus.subscribe(i => {
if(i === 'auth-login-success') {
return Observable.fromPromise(this.authService.getUser())
.subscribe(res => {
if(!res.id) {
this.router.navigate(['summary']);
return Observable.of(false);
}
return Observable.of(true);
},
error => {
return Observable.of(false);
})
} else {
console.log('user has not logged in')
this.router.navigate(['login']);
return Observable.of(false);
}
})
}
}
非常感謝幫助@GünterZöchbauer。這很有意義。 .first()不需要,並且工作得很好。但是,我收到了使用mergeMap()的打字錯誤。我嘗試了使用Google搜索,但無法找到解決方案。 '類型'(i:any)=> boolean |的參數Observable'不可分配給類型爲'(value:any,index:number)=> ObservableInput '的參數。 輸入'boolean | Observable '不可分配爲鍵入'ObservableInput '。 類型'true'不能分配給類型'ObservableInput '。 –
PBandJen
我剛剛看到 - 在catch()中它應該返回'Öbservable.of(false)'而不是'false'。我害怕我不知道 - 除了強打之外,我並沒有使用TS。 –