我正在使用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
听众重定向到主页。
答案 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()
来检测用户何时登录。