仅向使用 Firebase 的登录用户显示 HTML 页面

Posted

技术标签:

【中文标题】仅向使用 Firebase 的登录用户显示 HTML 页面【英文标题】:Displaying HTML page only to logged in users using Firebase 【发布时间】:2021-10-23 01:44:34 【问题描述】:

我有一个简单的 html 页面,我用 Firebase 保护它。

我希望有人对我这样做是否安全提出意见。

为了检查用户是否登录,我在标题中放置了一个 javascript 函数。我注意到,当我尝试在未登录的情况下访问该页面时,在被重定向之前,我可以在一瞬间看到该页面的内容。因此,我在正文中添加了一个 id,并将 display 设置为 none,直到验证用户是否已登录。参见代码:

<script>
    const auth = firebase.auth()
    auth.onAuthStateChanged((user) => 
    if (user) 
      document.getElementById("body").style.display = "block";
     else 
      window.location.replace("/login.html")
    
  );
</script>

我的问题是:您认为这样做有什么问题吗?这样做有什么安全问题吗?

【问题讨论】:

【参考方案1】:

这确实是一种在等待确定用户身份验证状态时防止过多闪烁的相当常见且简单的方法。

据我所知,防止闪存的唯一更好(但更复杂)的方法是将您自己的标记值存储在本地存储中,Michael 在他的 I/O 演讲中展示了这一点:https://youtu.be/NwY6jkohseg?t=1309

【讨论】:

【参考方案2】:

不,在使用纯 Javascript 时这样做完全没问题。即使您使用的是像 Vue 这样的现代框架,您也会存储一个数据变量 isUserLoggedIn 或其他有条件地渲染 UI 的东西。

如果有人使用浏览器开发工具将显示设置为block,只要您的安全规则设置正确,这不是威胁。

【讨论】:

以上是关于仅向使用 Firebase 的登录用户显示 HTML 页面的主要内容,如果未能解决你的问题,请参考以下文章

Android firebase:仅向付费用户发送推送通知

如何在 Laravel 中仅向访客用户显示或隐藏我的表的一部分?

仅向某些用户或组显示 Joomla K2 额外字段

仅向 Google 网站登录请求“openid”范围

未检索到 Firebase 用户的显示名称和照片网址

如何在使用 redux 登录 facebook/expo 和 firebase 后显示用户数据