我正在嘗試檢查多個條件以讓用戶登錄。當用戶成功登錄時,我能夠實作 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;
})
);
}
}
雖然注冊用戶有一個名為employeewhich的欄位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;
}
uj5u.com熱心網友回復:
假設您有 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)在警衛中使用運算子沒有意義,用戶可以嘗試任意次數進入頁面。
uj5u.com熱心網友回復:
您似乎正在嘗試在 auth-guard 中同時實施身份驗證和授權操作。
您可以對后端 身份驗證操作實施用戶憑據和角色檢查,并避免在您的防護中出現復雜情況。
或者您可以訪問此https://www.npmjs.com/package/keycloak-angular#authguard并檢查兩者是如何在單個 auth-guard 中實作的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/312537.html
標籤:javascript 有角的 打字稿 离子框架 身份验证保护
上一篇:Mouse.current.WarpCursorPosition似乎只在向左或向上移動(而不是向右或向下)時才能正常作業?
