Firebase getIdToken 不工作

新手上路,请多包涵

我正在使用来自 javascript 客户端的 Firebase 身份验证进行测试,我正在尝试 通过客户端文档上的检索 id 令牌检索 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
  }
})

原文由 Luis Gar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 371
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().onAuthStateChanged firebase.auth().user ,否则它将未定义。

原文由 user6327949 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于高于 V8 的 Firebase 版本。我们直接调用auth的函数。

 const loginWithGoogle = () => {
const googleProvider = new GoogleAuthProvider();
signInWithPopup(auth, googleProvider)
  .then((userCredentials) => {
    if (userCredentials) {
      setIsUserAuthenticated(true);
      window.localStorage.setItem('authorization', true);
      console.log(userCredentials);
      userCredentials.user.getIdToken().then((token) => {
        setToken(token);
        console.log(token);
      });
    }
  })
  .catch((err) => {
    console.log(err.message);
  });
};

原文由 Aamer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题