gpt4 book ai didi

javascript - 以 Angular 实现 canActivate auth 防护

转载 作者:行者123 更新时间:2023-12-03 01:43:57 27 4
gpt4 key购买 nike

我有一个具有此功能的服务,它会在 token 有效或无效时返回 true 或 false

loggedIn() {
return this.http.get('http://localhost:3000/users/validateToken')
.map(res => res.json()).map(data => data.success);
}

我有一个身份验证防护,可以在使用它的 protected 路由上激活。

  canActivate(){
this.authService.loggedIn().subscribe(res => {
if(res) {
return true;
}
else {
this.router.navigate(['/login'])
return false;
}
})
}

但我收到此错误。

incorrectly implements interface 'CanActivate'. Types of property 'canActivate' are incompatible. Type '() => void' is not assignable to type '(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => boolean | Promise | Obser...'. Type 'void' is not assignable to type 'boolean | Promise | Observable'.

我怎样才能实现我在这里想做的事情?

最佳答案

canActivate 函数必须返回一个 bool 值、一个 bool 值的 Promise 或一个 bool 值的可观察值。

就您而言,您什么也不返回。可能是因为您在函数中省略了 return 。

但是如果你添加它,它就不起作用,因为那样的话,你将返回一个订阅,而签名不接受该订阅。

你可以做的是:

canActivate() {
return this.authService.loggedIn().map(res => {
if(!res) {
this.router.navigate(['/login']);
}
return res;
});
}

使用此代码,您可以遵守签名,并保留您的路由逻辑。

关于javascript - 以 Angular 实现 canActivate auth 防护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50717424/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com