【问题标题】:Firebase Authentication JavaScript get successFirebase 身份验证 JavaScript 获得成功
【发布时间】:2017-11-26 22:42:15
【问题描述】:

使用以下 Firebase 电子邮件身份验证代码,您如何知道身份验证是否成功?

firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
            // Handle Errors here.
            var errorCode = error.code;
            var errorMessage = error.message;

            if (errorCode === 'auth/wrong-password') {
              alert('Wrong password.');
            } else {
              alert(errorMessage);         
            }

            console.log(error);
        });

我知道很容易意识到身份验证是否失败,但是,我如何知道用户是否能够使用他们提供的凭据登录?似乎没有“成功”登录的回调。我目前有一个登录表单,我想在成功登录后离开。

【问题讨论】:

    标签: javascript firebase firebase-authentication


    【解决方案1】:

    firebaser 在这里

    @ksav 的回答显示了检测用户何时登录我们的首选方式。

    为了完整起见,我想展示第二种检测方法,即直接响应signInWithEmailAndPassword

    firebase.auth().signInWithEmailAndPassword(email, password).then(function(user) {
       // user signed in
    }).catch(function(error) {
        var errorCode = error.code;
        var errorMessage = error.message;
    
        if (errorCode === 'auth/wrong-password') {
            alert('Wrong password.');
        } else {
            alert(errorMessage);         
        }
        console.log(error);
    });
    

    then() 将在用户登录后被调用。

    我们在文档中不再强调这种方法的原因是它会遗漏很多情况。例如:

    • 当用户重新加载页面时,then() 将不会被调用。另一方面,onAuthStateChanged() 回调也将被调用。
    • 用户退出(例如,如果他们的短期令牌无法刷新),catch() 将不会被调用。另一方面,onAuthStateChanged() 回调也将被调用。

    如果您想在用户主动登录时明确响应,我的回答中的方法可能会很有用。但在大多数情况下,我们建议您采用@ksav 答案中的方法。

    【讨论】:

      【解决方案2】:

      获取当前登录用户


      获取当前用户的推荐方法是在 Auth 对象上设置观察者:

      firebase.auth().onAuthStateChanged(function(user) {
        if (user) {
          // User is signed in.
        } else {
          // No user is signed in.
        }
      });
      

      文档:https://firebase.google.com/docs/auth/web/manage-users

      【讨论】:

        【解决方案3】:

        如果没有缓存,则表示成功。

        var isSuccessful = true
        firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
                // Handle Errors here.
                var isSuccessful = false
                var errorCode = error.code;
                var errorMessage = error.message;
        
                if (errorCode === 'auth/wrong-password') {
                  alert('Wrong password.');
                } else {
                  alert(errorMessage);         
                }
        
                console.log(error);
            })
            finally {
             if(isSuccessful)
                 //Success!
            }
        

        【讨论】:

        • 让每个人都知道为什么这个答案被否决 - 登录是异步的。因此,在调用 signInWithEmailAndPassword 之后直接测试 isSuccessful 变量是没有用的,您需要在 .Then 函数中检查登录是否成功
        猜你喜欢
        • 1970-01-01
        • 2017-06-16
        • 2018-07-19
        • 2022-01-15
        • 1970-01-01
        • 2020-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多