首页 文章

实现canActivate auth guard in angular

提问于
浏览
-1

我有一个使用此函数的服务,返回true或false,而不是令牌有效

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

我有一个auth guard可以在使用它的受保护路由上激活 .

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

但是我得到了这个错误 .

错误地实现了界面'CanActivate' . 属性'canActivate'的类型是不兼容的 . 类型'()=> void'不能分配给类型'(route:ActivatedRouteSnapshot,state:RouterStateSnapshot)=> boolean |承诺| ...安装前后“ . 类型'void'不能赋值为'boolean |承诺|观察到的” .

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

1 回答

  • 0

    canActivate 函数必须返回布尔值,布尔值的承诺或布尔值的可观察值 .

    在你的情况下,你什么都不返回 . 可能是因为你在函数中省略了 return .

    但是如果你添加它就行不通,因为那时你会返回一个签名不接受的订阅 .

    你能做的是:

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

    使用此代码,您符合签名,并保留您的路由逻辑 .

相关问题