当前位置: 首页 > 知识库问答 >
问题:

Firebase 4.1.3:首次使用电子邮件和密码登录后,未调用onAuthStateChange

颛孙麻雀
2023-03-14

我将应用程序的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();
        });
    });

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

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

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

    < li >用户重新加载应用程序 < li >用户现在在应用程序中 < li >用户退出应用程序 < li >用户登录到触发console.log的应用程序(“signInWithEmailAndPassword成功”); < li >调用了onAuthStateChanged回调函数

共有2个答案

慕容典
2023-03-14

试试这种方法,我希望它能奏效

firebase.auth().onAuthStateChanged(function(user){
console.log(user);
})
齐意致
2023-03-14

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

你会发现,如果你输入

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

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

我遇到了完全相同的问题。在sendEmail验证()步骤中,请注意它如何要求您使用auth()。当前用户,发出信号表明必须有某种用户登录(我不确定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()函数。

 类似资料:
  • 问题内容: 我希望django通过电子邮件而非用户名对用户进行身份验证。一种方法是提供电子邮件值作为用户名值,但我不希望这样。原因是,我有一个,所以我不能有一个。 另一个原因是所有电子邮件都是唯一的,但有时用户名已被使用。因此,我将自动创建用户名为。 我该如何更改才能让Django通过电子邮件进行身份验证? 这就是我创建用户的方式。 这就是我的登录方式。 除了先获取用户名外,登录还有其他方法吗?

  • 我希望django通过电子邮件而不是用户名来验证用户。一种方法是提供电子邮件值作为用户名值,但我不希望这样。原因是,我有一个url

  • 我想登录我的spotify帐户并获取我的持有者令牌。我试图用请求模块执行此操作,但我无法管理登录操作。如果您告诉我如何使用请求模块登录帐户并获取持有者令牌,我将非常高兴。如果您不知道这一点,如果您可以登录硒模块的帐户并告诉我如何获取下图中的值,我将非常高兴:)(登录帐户是通过邮件,密码)

  • 在“登录苹果”上,如果用户选择了“隐藏我的电子邮件”,他将注册一个私人电子邮件ID。同样,如果同一个用户尝试使用原始电子邮件地址(使用任何社交媒体帐户或原始电子邮件id)注册,他将被视为不同的用户? 如何可能确保我们在注册后数据库中有一个唯一的用户?

  • 首次登陆的用户名和密码有二个,分别为: 用户名:admin     密码 :admin 用户名:user0     密码:user0 账号admin是系统管理员权限,账号user0是普通用户,属于设计角色,拥有设计权限。 在登录后,注意更改账号密码。

  • 我希望身份验证组件允许用户登录输入用户名或电子邮件。在我的用户表中,两个字段-userName和userEmail都是唯一的。注册时,密码生成如下: sha1($username.$password); 问题是用户无法使用电子邮件登录。 应用程序控制器 用户控制器:登录功能如下: Auth。php:(我在这里对生成密码的方式做了一些更改,因为我正在使用cakephp会话自动登录到SMF论坛。) 我