我正在实现一个CanActivate
警卫队,它检查用户是否登录。我已经为此创建了一个服务,并且正在使用私有变量“ userLoggedIn”,其值可以为true或false。
首先从AWS提取数据,以查看用户是否登录,然后设置变量的值。
constructor() {
Auth.currentAuthenticatedUser({
bypassCache: false
}).then(user => {
console.log(user);
if(user.currentAuthenticatedUser === '_admin'){
this.set_user(true);
}
}).catch(err => {this.set_user(false);
});
}
set_user(thing){
console.log(this.userLoggedIn);
}
如果用户存在,那么我想对其进行一些计算,然后将变量设置为“ True”或“ False”。
我有一个下面的函数,该函数在被调用时将值返回给auth Guard。
getUserLoggedIn(){
return this.userLoggedIn;
}
出现的问题是,当auth Guard调用getUserLoggedIn时,构造函数中的计算尚未完成,并且返回的值是'undefined'。
我创建了以下三个函数:-
checking(){
return new Promise((resolve, reject) => {
Auth.currentAuthenticatedUser({
bypassCache: false
}).then(user => {
console.log(user);
if(user.currentAuthenticatedUser === '_admin'){
this.set_user(true);
}
})
.catch(err => {this.set_user(false);
});
resolve();
});
}
然后另一个:-
getUserLoggedIn(){
return this.userLoggedIn;
}
为了顺序执行这些功能,我调用了另一个功能:-
toGetRes(){
this.checking().then(res => this.getUserLoggedIn())
}
我在我的身份验证保护服务中呼叫了toGetres()
,但仍然无法按顺序工作。我缺少什么,还是应该尝试其他方法?
这是我的authGuard
export class AuthGuard implements CanActivate {
constructor(private user: DataService, private router: Router) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if (this.user.getUserLoggedIn()){
return true;
}
else{
console.log(this.user.getUserLoggedIn());
this.router.navigate(['/login']);
}
}
}
如果未通过身份验证,我想将人们重定向到'/login'
,但是即使我已登录,它也会重定向我。