firebase 如何在AngularFire2中获取当前用户的访问令牌?

llew8vvj  于 2023-05-18  发布在  Angular
关注(0)|答案(7)|浏览(112)

在AngularFire中,你可以访问认证用户的提供者(例如Google)accessToken。
似乎没有办法用AngularFire2访问它。
在初始登录时,像这样说:

this.af.auth.subscribe(user=> {
  if (user) {
    console.log(user.google);
  }
});

它将注销idToken,accessToken,provider,但(在页面刷新时)随后将注销标准详细信息(uid,displayName等....)并且accessToken不是可访问的属性?
是否有方法访问当前用户的accessToken?

4urapxun

4urapxun1#

getToken已弃用。你应该使用getIdToken

this.af.auth.currentUser.getIdToken(true)
  .then((token) => localStorage.setItem('tokenId', token));
3mpgtkmj

3mpgtkmj2#

访问令牌仅在用户首次登录时才可访问。来自Firebase迁移指南Web开发人员:
通过Firebase.com Authentication API,您可以轻松地使用提供商的访问令牌调用提供商的API并获取其他信息。此访问令牌仍然可用,但仅在登录操作完成后立即可用。

var auth = firebase.auth();

var provider = new firebase.auth.GoogleAuthProvider();
auth.signInWithPopup(provider).then(function(result) {
  var accessToken = result.credential.accessToken;
});

因此,它确实在页面刷新时不可用。如果你想让它保持可用,你需要自己坚持它。

kkbh8khc

kkbh8khc3#

使用AngularFire2,你可以像这样获取令牌:

this.af.auth.getToken() // returns a firebase.Promise<any>

如果你想得到一个ES6 Promise,只需要使用

Promise.resolve()
  .then(() => this.af.auth.getToken() as Promise<string>)
1l5u6lss

1l5u6lss4#

这对我很有效:

this.af.auth.getAuth().auth.getToken(false);//true if you want to force token refresh

你可以把它放到一个服务中,然后你可以像这样得到令牌:

this.authService.getToken().then(
  (token) => console.debug(`******** Token: ${token}`));
vc6uscn9

vc6uscn95#

我在访问访问令牌(res.stsTokenManager.accessToken)时遇到困难,因为它总是返回undefined。为了解决此问题,我实施了以下解决方案:

this.afAuth.currentUser.then((res: any) => {
  console.log(JSON.parse(JSON.stringify(res))?.stsTokenManager.accessToken);
});

我使用了afAuth.currentUser方法,该方法返回一个解析为当前用户对象的promise。然后,我应用then函数来处理解析的值。在then回调中,我使用JSON.stringify(res)将用户对象转换为JSON字符串。之后,我使用JSON.parse将JSON字符串解析回一个对象。最后,为了安全地访问访问访问令牌属性,我使用了可选的链接操作符(?.),后跟stsTokenManager.accessToken。
通过实现这个代码片段,我能够成功地记录来自当前用户的stsTokenManager对象的访问令牌的值。这种方法帮助我避免了访问令牌或任何中间属性未定义时的任何潜在错误。

crcmnpdw

crcmnpdw6#

从angularfire2中的存储中获取身份验证令牌

JSON.parse(JSON.stringify(this.afAuth.auth.currentUser)).stsTokenManager.accessToken

如本讨论中所见:https://github.com/angular/angularfire2/issues/725

nvbavucw

nvbavucw7#

AngularFire2:(例如:使用电子邮件和密码组合注册用户。)

import { AngularFireAuth } from 'angularfire2/auth';
model : any = {} ;
private afAuth : AngularFireAuth,

regWithEP () {
    this.afAuth.auth.createUserWithEmailAndPassword(this.model.email, this.model.password).then((user) => {
    /* IMPORTANT !! */
    /* EXPLICIT CHECK IF USER IS RETURNED FROM FIREBASE SERVICE !! */

          if (user) {
            console.log(user);
            /* Here user is available and is the same as auth.currentUser */

            this.afAuth.auth.currentUser.getToken().then((token) => {

            //token is available here
            //set token to currentUser, signIn , re-direct etc.
            });
        }
    });
}

相关问题