我想知道如何配置页面以仅允许Firebase中经过身份验证的用户。我在设置我的网站时遇到了困难,我希望用户输入登录名和密码,然后在进行身份验证后会转到他的个人资料。
用户所指向的个人资料(网页)具有网址
www.example.com/ “user.uid” /index.html
但只有经过身份验证的用户才能访问此页面,因此如果有人访问了该网址
www.example.com/ “user.uid” /index.html
用户必须被定向到主页
登录页面上的代码:
btnLogin.addEventListener('click', e =>{
const email = txtEmail.value;
const pass = txtPassword.value;
const auth = firebase.auth();
const promise = auth.signInWithEmailAndPassword(email,pass);
promise
.then(user => window.location.href="http://www.example.com/" + user.uid + "/index.html")
.catch(e => console.log(e.message));
})
客户页面上的代码:
firebase.auth().onAuthStateChanged(firebaseUser => {
if(firebaseUser){
console.log(firebaseUser);
}else{
window.location.href = "http://www.example.com";
console.log("offline");
}
});
我遇到的问题是,当您重定向到客户端页面时,用户的状态将会脱机
答案 0 :(得分:0)
Firebase经过优化,可以在客户端工作,特别是单页面应用程序。您可以执行以下操作之一:
处理身份验证检查客户端:在该页面上添加onAuthStateChanged侦听器www.example.com/"user.uid" /index.html:如果用户未登录并且没有&# 39; t匹配该页面的uid,重定向到登录页面。
使用cookies。登录后,您可以将Firebase ID令牌发送到后端并填充会话Cookie或仅使用ID令牌作为会话Cookie。确保在执行此操作之前验证该ID令牌。 Firebase有一个node.js和java库来帮助解决这个问题。您还必须确保始终在客户端收听身份验证更改,因为Firebase ID令牌每小时到期。无论如何,使用cookie,下次用户请求受限资源时,您检查cookie是否有效并在提供该资源之前与预期用户匹配,否则302与登录页面匹配。