Firebase限制在没有用户登录的情况下访问其他页面

时间:2017-08-18 17:22:04

标签: javascript html firebase

我有一个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限制直接访问的任何建议都会有所帮助。

谢谢!

2 个答案:

答案 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";
  }

});

我认为这将对初创公司有所帮助。随着业务的增长,我建议您考虑采取更多的安全措施