我有一个index.html页面,在正确登录后会重定向到home.html。我已经解决了登录和注销部分。我的问题是我可以直接在URL上访问home.html而无需登录。
这是我的home.html的一些片段
<script>
var config = {
apiKey: "xxxxxx",
authDomain: "firebaseapp.com",
databaseURL: "firebaseio.com",
};
firebase.initializeApp(config);
const auth=firebase.auth();
const db=firebase.database();
var user = firebase.auth().currentUser;
if (user) {
//blank if correct login
} else {
window.location.href = 'firebaseapp.com/index.html';
}
</script>
我把它放在home.html的开头,这样如果直接访问该页面,它将返回索引。它正在重定向到index.html但即使我正确登录,它仍然会将我重定向到index.html
似乎firebase的auth太快,无法正确初始化currentUser值,从而产生null结果。关于如何使用URL限制直接访问的任何建议都会有所帮助。
谢谢!
答案 0 :(得分:1)
尝试使用firebase.auth().onAuthStateChanged
代替firebase.auth().currentUser;
,这是获取当前用户的推荐方式。
通过currentUser
获取用户可能会导致类似于您所看到的问题。这是来自firebase官方文件。
注意: currentUser也可能为null,因为auth对象尚未完成初始化。如果您使用观察者来跟踪用户的登录状态,则不需要处理此案例。
尝试让当前用户这样:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
} else {
// No user is signed in.
}
});
答案 1 :(得分:0)
我不是那种经验丰富的喷气机,但是这对我有用,但是我不确定这是否是最好的方法。我只是给我的身体一个ID并添加了以下JavaScript代码:
var auth = firebase.auth();
auth.onAuthStateChanged(function(user) {
if (user) {
document.getElementById('homeBody').style.visibility = "visible";
} else {
document.getElementById('homeBody').style.visibility = "hidden";
}
});
我认为这将对初创公司有所帮助。随着业务的增长,我建议您考虑采取更多的安全措施