在页面加载之前重定向未登录用户

3

我有一个关于我正在使用谷歌Firebase构建的网站安全性的问题。目前它是一个非常简单的网站,带有注册/登录表单和登录的可能性。当用户登录时,他将被重定向到另一个页面:

  firebase.auth().onAuthStateChanged(firebaseUser => {
    if(firebaseUser){
      window.location = 'home.html';
    } else {
      console.log('not logged in');
    }
  });

现在,任何人都可以查看js文件,甚至没有账户也能够知道用户将要被重定向到哪里,所以某些人可以通过在网站地址末尾添加/home.html来绕过登录表单。因此,在home.html中,我添加了一个脚本,用于将未登录的用户重定向回主页:
if(!firebaseUser){
  window.location = 'index.html';
} 

目前这种方式可以正常运作,用户可以进入网页,但如果未登录,则会立即重定向。然而,想象一下我在网页上有一些私人信息,我不希望其他人能够登录。但是,如果有人在浏览器设置中禁用了JavaScript并键入带有home.html的地址,则可以访问该页面并且不会被重定向。
问题是:有没有解决这种情况的方法? 是否可以在用户获得访问网站文件权限之前检查用户是否已经登录,并在未登录时将其重定向?

当用户成功登录时,将令牌存储到浏览器的localStorage中,并在用户尝试访问任何页面时检查此(token)值。如果在localStorage中找不到该值,则表示用户已注销。因此,在这种情况下,将用户重定向到登录页面。 - Rahul Chauhan
1个回答

1
您无法在客户端执行此操作。任何人都可以导航到已登录的页面。您必须在后端或安全规则中执行它。例如,假设已登录的页面显示用户信息,您将通过 Firebase 安全规则(如果您正在使用实时数据库或 Firestore 等)或通过将用户 ID 令牌发送到服务器(如果您正在使用自己的后端数据库)并在返回要显示的内容之前进行验证来执行此操作。如果有人未登录,则会收到一个错误,您会捕获它并将其重定向回登录页面。

如果您想使用会话 cookie 和自己的数据库,则另一种选择是尝试 Firebase Auth 的 会话 cookie 管理解决方案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接