加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – 否定守卫中的承诺结果

发布时间:2020-12-17 17:54:46 所属栏目:安全 来源:网络整理
导读:我有一个工作的angular2 guard,带有一个canActivate(),它调用isLoggedIn()的服务并返回一个promise然后解析并且路由被适当地处理. 但是,我试图做相反的事情,看看用户何时没有登录,并且它无法正常工作. 我尝试了一些简单的事情(添加一个!运算符),希望它可以
我有一个工作的angular2 guard,带有一个canActivate(),它调用isLoggedIn()的服务并返回一个promise然后解析并且路由被适当地处理.

但是,我试图做相反的事情,看看用户何时没有登录,并且它无法正常工作.

我尝试了一些简单的事情(添加一个!运算符),希望它可以工作:

@Injectable()
export class AuthGuard implements CanActivate {
    constructor(private authService: AuthService) {}

    canActivate() {
        return !this.authService.isLoggedIn();
    }
}

但是,这总是返回一个假值,并且路径永远不会激活.

这是我的isLoggedIn()函数的相关摘录:

isLoggedIn(): Promise<Boolean> {
  var component = this;
  return new Promise((resolve,reject) => {       
      component.queryForUser((user) => {
        resolve(user != null);
      });
    }
  });
}

如果用户不等于null,则他登录并且promise以true结算.否则,错误.

虽然我可以简单地添加一个参数来指定我要查找的状态,或者甚至创建一个isNotLoggedIn()函数,但是具有相同的逻辑但反转,我问,有没有办法否定对于canActivate的promise的决心的价值()?

解决方法

return!this.authService.isLoggedIn()将无效,因为JS的工作方式. this.authService.isLoggedIn()是promise对象并且是真实的. !this.authService.isLoggedIn()将始终为false.

相反,promise结果应映射到否定结果

canActivate() {
    return this.authService.isLoggedIn().then(result => !result);
}

要么

async canActivate() {
    return !(await this.authService.isLoggedIn());
}

等待的括号……是可选的,用于可读性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读