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

时间:2016-10-14 11:28:58

标签: javascript firebase firebase-authentication angularfire2

在AngularFire中,您可以为经过身份验证的用户访问提供商(例如Google)accessToken。

似乎没有办法通过AngularFire2访问它?

初次登录时请说:

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

它会注销idToken,accessToken,提供者, 但是(在页面刷新时)随后将注销标准细节(uid,displayName等....) 而accessToken不是一个可访问的属性?

有没有办法访问当前用户accessToken?

7 个答案:

答案 0 :(得分:1)

只有在用户首次登录时才能访问访问令牌。来自Firebase migration guide for web developers

  

使用Firebase.com身份验证API,您可以轻松使用提供商的访问令牌呼叫提供商的API并获取其他信息。此访问令牌仍然可用,但仅在登录操作完成后立即可用。

var auth = firebase.auth();

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

因此页面刷新确实无法使用。如果你想让它保持可用,你需要自己坚持下去。

答案 1 :(得分:1)

这对我有用:

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

您可以将其放入服务中,然后就可以获得这样的令牌:

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

答案 2 :(得分:1)

getToken现已弃用。您应该使用getIdToken代替:

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

答案 3 :(得分:0)

使用AngularFire2,您可以获得如下标记:

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

如果您想获得ES6承诺,请使用

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

答案 4 :(得分:0)

googleSignIn() {

    return this.af_auth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider())
      .then(res => {

        // retrieve access token 
        const AccessToken = res.credential['accessToken'];
        console.log("Access token: ", AccessToken);


      })
      .catch(error => {
        console.log(error.message);
      });

答案 5 :(得分:0)

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

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

在此讨论中看到: https://github.com/angular/angularfire2/issues/725

答案 6 :(得分:-2)

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

restapi