Firebase,避免登录用户访问登录页面

时间:2018-06-14 09:21:23

标签: javascript firebase firebase-authentication

我正在使用firebase托管来制作应用。 我在login.html页面中有以下代码。

    <script>

        $(document).ready(function() {
                firebase.auth().onAuthStateChanged(function(user) {
                if (user) {
                    // user is loggin redirect to dashboard
                } else {
                    // No user is signed in. keep them here
                }
                });
        });

 $("#loginbtn").on("click",()=>{
                console.log("login");
                var errormessage="";
                var email = $("#email").val();
                var password =  $("#password").val();

                //client validate
                if(email.length == 0)
                errormessage+=("Enter a valid email.<br>");
                if(password.length == 0)
                errormessage+="Enter a valid password.<br>";
                if(errormessage.length==0){
                    $("#loginbtn").prop('disabled', true);
                    firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
                    // Handle Errors here.
                    var errorCode = error.code;
                    var errorMessage = error.message;
                    $("#loginbtn").prop('disabled', false);
                    showMessage(errorMessage);
                    // ...
                    });


                }else{
                    $("#signupbtn").prop('disabled', false);
                    showMessage(errormessage);
                }


            })
    </script>

但是,当用户登录并且用户明确尝试访问login.html时,将其放在地址栏中登录页面显示几秒,然后重定向到仪表板页面。 这会留下糟糕的用户体验,因为登录表单会显示几秒钟。 我怎样才能实现像PHP会话一样的东西?页面重定向而不呈现? 我们可以使用&#34;重写&#34;来连接云功能。将用户从后端重定向到其他页面?如果用户登录或不在客户端登录,云功能是否可以找到?

(1)用户使用signInWithEmailAndPassword()登录 (2)AuthState听众重定向到主页。
(3)用户再次尝试访问login.html页面 (4)login.html页面显示几秒钟。的&LT;问题
(5)AuthState听众重定向到主页。

1 个答案:

答案 0 :(得分:1)

如果我完全理解您的问题,您应该等待signInWithEmailAndPassword(email, password)返回的承诺解析为重定向您的用户。

事实上,signInWithEmailAndPassword(email, password)“异步登录”,如doc中所述,并返回一个承诺。这就是你提到“需要时间”的原因。

所以你应该按照以下方式处理登录:

firebase.auth().signInWithEmailAndPassword(email, password)
   .then(userCredential => {
       //redirect your user here, because at this point the user is logged in.
   })
   .catch(error => {
            // Handle Errors here.
            // ...
    });

如果要在异步执行函数期间显示微调器或进度条,可以在单击loginbtn按钮时将其显示并隐藏在then()中。

请注意,在这种情况下,您无需使用onAuthStateChanged()来检测用户何时登录。

相关问题