【发布时间】:2020-06-09 15:38:06
【问题描述】:
我有一个 Angular 7 应用程序,在其中我有一个呼叫后响应,并且基于该呼叫后响应,我想让警卫处于活动/非活动状态。我有这样的路线守卫
canActivate = (_router: ActivatedRouteSnapshot): boolean => {
console.log('in link expiry guard')
let userEmail = _router.paramMap.get('email');
let isAllow;
console.log('params : ', userEmail)
userEmail = this._utilityService.decryptMsgByCryptoJs(userEmail);
console.log('user email : ', userEmail)
this._dataService.post(this._const.userResetPasswordLinkExpiry, { email: userEmail }).subscribe(resp => {
console.log('verify response : ',resp)
if (resp.success) {
console.log('in success')
isAllow = true;
} else {
isAllow = false;
}
})
console.log('allow flag : ',isAllow)
if (isAllow) {
console.log('in allow')
return true;
} else {
console.log('in not allow')
this._utilityService.navigate('/login');
this._dataService.exhangeResetPasswordObsMsg({ event: 'linkExpired' });
return false;
}
}
但问题是,当我的 http post 通话正在进行时,我的警卫完全执行并返回 false,之后响应来自 post call。我该如何管理这种情况,所以我将根据 http post 呼叫响应使路由为真或假。
【问题讨论】:
-
问题是您在并发函数之外返回并且代码不断评估。在 post 调用内部而不是外部返回,并返回
Promise或Observable而不是布尔值。 CanActivate 可以返回其中任何一个 -> angular.io/api/router/CanActivate -
你能告诉我答案吗?
-
查看我更新的问题我已经更新了我的路由守卫。但是现在它在
canActivate = (_router: ActivatedRouteSnapshot): Observable<boolean>线上给出了一个错误。这么说function must return a value -
您好,您可以在 gurad 中使用 route reolsver 而不是 http。
-
您仍然需要整体回电,请参阅:stackoverflow.com/questions/37948068/…\
标签: angular typescript angular-route-guards