首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AuthGuard: OnAuthStateChanged对角5+防火墙中的校验令牌

AuthGuard: OnAuthStateChanged对角5+防火墙中的校验令牌
EN

Stack Overflow用户
提问于 2018-02-13 21:14:27
回答 1查看 1.1K关注 0票数 1

每次用户注册时,以下代码都是超值的:

代码语言:javascript
复制
this.router.navigate(['/']);
firebase.auth().currentUser.getToken()
   .then(
      (token: string) => this.token = token
    )

getToken方法的定义如下:

代码语言:javascript
复制
getToken() {
   firebase.auth().currentUser.getToken()
     .then(
       (token: string) => this.token = token
      );
   return this.token;
}

我保存令牌是因为我有一个路由保护器,用于检查用户是否有令牌:

代码语言:javascript
复制
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
   return this.authService.isAuthenticated();
}

现在,我刚刚阅读了Firebase的文档,这是使用onAuthStateChanged()检查用户是否已登录的一种良好实践:

代码语言:javascript
复制
firebase.auth().onAuthStateChanged(function(user) {
   if (user) {
      // User is signed in.
   } else {
      // No user is signed in.
   }
});

那么,在应用程序中使用角+ Firebase来定义(有效)用户的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 21:53:37

我使用这个函数来检查用户是否登录(使用angularfire2,这是一种很大的帮助,因为它为您提供了指向firebase https://github.com/angular/angularfire2的包装器):

代码语言:javascript
复制
isLoggedIn(){

var promise = new Promise((resolve, reject) => {

  this.afAuth.authState.subscribe(res => {
    if (res && res.uid) {
      console.log('user is logged in');
      resolve(true);
    } else {
      console.log('user not logged in');
      resolve(false);
    }
  });
});

return promise;

}

以下是如何使用该函数:

代码语言:javascript
复制
this.auth.isLoggedIn().then(
    (val) => {
      if(val){

        //Do your re-direct

      }else{
        //send alert or something
      }
    }
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48775760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档