javascript - 登录前检查多个条件使用 auth guard
问题描述
我正在尝试检查多个条件以让用户登录。当用户成功登录时,我能够实施 authguard。用户不仅需要验证,还需要满足登录条件。这是我如何实施身份验证保护来检查用户是否登录。
export class AuthGuard implements CanActivate {
access: boolean;
constructor(
private auth: AuthService,
private router: Router,
) {}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
):
| Observable<boolean | UrlTree>
| Promise<boolean | UrlTree>
| boolean
| UrlTree {
return this.auth.user$.pipe(
take(1),
map((user) => (user ? true : false)),
tap((isLoggedIn) => {
if (!isLoggedIn) {
this.router.navigate(['/login']);
return false;
}
return true;
})
);
}
}
虽然注册用户有一个名为employee
which is的字段boolean
。所以我想实现 auth guard 来登录,这样当用户登录时,它应该满足用户凭据有效并且用户是员工的条件,我尝试使用以下方式进行以下操作,empolyee
但是undefined
this.auth.user$.subscribe((res) => {
this.isEmployee = res.isEmployee;
});
if (!this.isEmployee) {
console.log(this.isEmployee);
this.router.navigate(['/login']);
console.log('user is not employee');
return false;
}
console.log('user is approved', this.isEmployee);
return true;
}
解决方案
假设您有 keys isLoggedIn
,isEmployee
您可以执行以下操作:
return this.auth.user$.pipe(
map((user) => {
if(user.isLoggedIn && user.isEmployee){
return this.router.navigate(['login']);
} else {
return false;
}
})
);
在警卫中使用运算符没有意义take(1)
,用户可以尝试任意次数进入页面。
推荐阅读
- php - PHP问题:高速公路的第8和第9个入口不起作用
- typescript - 来自 TS 的更好的类型检查帮助
- azure - Azure 管道参数
- git - git 子模块更新 --init --force --remote
- python - 如何使用opencv修复图像的褪色部分
- javascript - 用户返回未定义,但在我控制台记录时返回信息
- c++ - 参考 c++ 大小的初始数组
- javascript - 我在 Three.js 中看不到对象
- julia - 在 Julia IndexedTables ndsparse 中定义空列或未初始化列
- python - 在函数 pandas extract 中使用单词列表