gpt4 book ai didi

javascript - 火力地堡 4.1.3 : onAuthStateChange not called after first sign in with email and password

转载 作者:行者123 更新时间:2023-11-29 23:41:36 24 4
gpt4 key购买 nike

我将应用的 Firebase 版本从 3.5.0 升级到 4.1.3,并注意到在用户验证其电子邮件地址后首次成功登录后,不再调用 onAuthStateChange 回调函数。

该应用程序是用 JavaScript 编写的。

这些是我的代码的相关部分:

回调设置

firebase.auth().onAuthStateChanged(onAuthStateChange);

回调

function onAuthStateChange (user) {
console.log(user); // Not appearing in console
}

登录

firebase.auth().signInWithEmailAndPassword(email, password)
.then(function (user) {
console.log("signInWithEmailAndPassword success"); // This appears in the console
})
.catch(function(error) {
console.log("signInWithEmailAndPassword", error);
self.signInError = error.message;
$timeout(function () {
$scope.$apply();
});
});

编辑 - 这些是重现问题的步骤(我的应用程序用户的典型操作):

  • 用户下载并启动应用
  • 用户使用电子邮件和密码注册
  • 应用程序发送电子邮件验证邮件
  • 用户收到验证邮件并点击链接
  • 用户进入应用的登录页面
  • 用户登录触发console.log("signInWithEmailAndPassword success");
  • onAuthStateChanged 回调调用

用于开发和测试目的(不是用户会做但我已经做了)

  • 用户重新加载应用
  • 用户现在在应用中
  • 用户退出应用
  • 用户登录应用触发 console.log("signInWithEmailAndPassword success");
  • onAuthStateChanged 回调调用

最佳答案

问题是 auth().createUserWithEmailAndPassword() 实际上确实登录了一种类型的用户。

你会发现如果你输入

firebase.auth().onAuthStateChanged(user => {
console.log("onAuthStateChanged()");

createUserWithEmailAndPassword() 确实会触发控制台日志。但是,似乎没有有效的“用户”对象,这可以解释为什么没有任何内容出现,因为您只记录了用户。

我遇到了完全相同的问题。在 sendEmailverification() 步骤中,请注意它如何要求您使用 auth().currentUser,表示必须有某种用户登录(我不确定 firebase 如何处理电子邮件验证用户和未验证用户之间的差异场景)

您可以在发送电子邮件验证后简单地调用 signOut() 函数,它应该允许 onAuthStateChanged() 函数在第一次登录时调用(无需重新加载应用程序)

  firebase.auth().currentUser.sendEmailVerification()
.then(() => {
console.log("Email verification sent");
firebase.auth().signOut().then(() => {
console.log("Signed out!");
}).catch((err) => {
console.log("Error signing out!", err);
});

令人困惑的是,您实际上可以成功地“登录”,而不会导致 AuthStateChanged 发生变化或返回任何错误。

TLDR:记得在发送电子邮件验证后使用 auth().signOut() 函数。

关于javascript - 火力地堡 4.1.3 : onAuthStateChange not called after first sign in with email and password,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45108570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com