Firebase getIdToken无效

时间:2018-04-08 20:14:20

标签: javascript firebase web firebase-authentication

我正在使用来自javascript客户端的Firebase身份验证进行测试,并且我尝试使用retrieve id tokens on clients documentation检索idToken

我想我忘记了一些基本的东西。

用户使用Google登录

代码只是在其他帖子和文档中看到的。结果在评论中。

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
     console.log(user); // this is shown. Firebase user and provider data
     console.log(user.uid); // Shown
        firebase.auth().user.getIdToken().then(function(idToken) {
           console.log(idToken+'--'); // Nothing happens. No errors and the function not continues
        });
     console.log(user.uid); // Nothing happens
  }
})

由于

修改

如果我添加任何错误,也没有任何反应。例如,如果我添加警报它会显示警报,但如果我有错误,例如alter()没有显示任何错误。添加了捕获而没有任何内容

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
     alter() // Nothing happens and the function stop         
     console.log(user); // this is shown. Firebase user and provider data
     console.log(user.uid); // Shown
        firebase.auth().user.getIdToken().then(function(idToken) {
           console.log(idToken+'--'); // Nothing happens. No errors and the function not continues
        }).catch(function(error) {
            console.log(error+'--'); // Nothing
        });
     console.log(user.uid); // Nothing happens
  }
})

2 个答案:

答案 0 :(得分:2)

firebase.auth().user在那一刻还没有user。您必须直接使用user中的firebase.auth().onAuthStateChanged

firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
        console.log(user); // It shows the Firebase user
        console.log(firebase.auth().user); // It is still undefined
        user.getIdToken().then(function(idToken) {  // <------ Check this line
           console.log(idToken); // It shows the Firebase token now
        });
    }
});

您只能在firebase.auth().user完成后且在其范围之外使用firebase.auth().onAuthStateChanged,否则将不确定。

答案 1 :(得分:0)

firebase.auth()。currentUser是同步的。我们可以通过订阅auth observable使其异步。

取决于我们使用的库,JavaScript SDK具有onAuthStateChanged(),而AngularFire2具有authState()onAuthStateChanged()。

// For AngularFire:

private afAuth: AngularFireAuth,

afAuth.authState.subscribe(user => {
  if (user) {
    user.getIdToken(true).then(idToken => {
      // ...
    });
  }
});

// or

this.afAuth.auth.onAuthStateChanged(user => {
  if (user) {
    user.getIdToken(true).then(idToken => {
     //...
    });
  }
});



// For the JS SDK
firebase.auth().onAuthStateChanged(user => {
  if (user) {
    user.getIdToken(true).then(idToken => {
      // ...
    });
  }
});