【问题标题】:Firebase getIdToken not workingFirebase getIdToken 不起作用
【发布时间】:2018-09-18 05:24:20
【问题描述】:

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

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

用户使用 Google 登录

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

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
  }
})

【问题讨论】:

  • 根据文档,它是firebase.auth().currentUser.getIdToken(),而不是像你这里的firebase.auth().user。试试看是否能解决问题,如果没有,请更新您的问题
  • 试过了。结果相同。我从其他帖子中获得了代码,他们说有效。和这个一样。 stackoverflow.com/questions/39799588/…

标签: javascript firebase web firebase-authentication


【解决方案1】:

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 => {
      // ...
    });
  }
});

【讨论】:

    【解决方案2】:

    firebase.auth().user 在那一刻还没有user。您必须像这样直接使用来自firebase.auth().onAuthStateChangeduser

    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().onAuthStateChanged 完成并超出其范围后使用firebase.auth().user,否则它将是未定义的。

    【讨论】:

    • 胖箭头版本... user.getIdToken().then((idToken) => { console.log(idToken); });
    • 我收到此错误[Error: [auth/internal-error] An internal error has occurred, please try again.] 使用此await auth().currentUser?.getIdToken(true) "@react-native-firebase/app": "12.4.0", "@react-native-firebase/auth" : "12.4.0",
    猜你喜欢
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2023-03-03
    • 2014-08-04
    • 2018-06-26
    • 2018-02-07
    • 2016-12-05
    相关资源
    最近更新 更多