显示基于 Firebase 身份验证的 DOM 元素的首选方式是啥

Posted

技术标签:

【中文标题】显示基于 Firebase 身份验证的 DOM 元素的首选方式是啥【英文标题】:What is preferred way to show DOM elements conditioned on firebase authentication显示基于 Firebase 身份验证的 DOM 元素的首选方式是什么 【发布时间】:2019-08-31 20:17:40 【问题描述】:

我正在尝试构建一个小型网页,其中登录由 Firebase Google Auth 控制,并弹出个人资料页面。显示个人资料页面的安全和首选方式是什么?

目前我正在使用onAuthStateChanged 来操作特定的 div,该 div 在用户登录时保存个人资料数据。如果用户未登录,我将使用 removeChild() 方法从 DOM 中删除该 div,并在登录时 appendChild() 添加回该 div。

【问题讨论】:

您对配置文件 div 过早显示的“安全”问题有何担忧,因为据推测数据将存储在 Firebase 中,用户在访问之前需要登录。 【参考方案1】:

假设你正在使用firebase 的原生firebase.auth().onAuthStateChanged 函数

firebase.auth().onAuthStateChanged(function(user) 
  if (user) 
    // User is signed in.
   else 
    // No user is signed in.
  
);

以及firebase.auth().currentUser 检查用户当前是否登录。

在这种情况下,使用removeChildappendChild 完全没问题,而且它们没有任何安全威胁,就像用户没有登录一样,刷新页面后所有信息都会消失。

这是一个小型的 firebase 应用程序,它显示当与 firebase 的连接关闭并使用 removeChild 时,appendChild 在 firebase 断开连接时停止工作,从而证明它可以安全使用。

https://jsfiddle.net/vh9xay6e/

请注意,在此示例中,我没有测试任何身份验证,只是使用带有 removeChildappendChild 的 firebase。

您可以看到,一旦与 Firebase 的连接结束,前端就不会发生任何改变。

【讨论】:

【参考方案2】:

使用onAuthStateChanged 方法我们可以对状态变化采取行动(登录或退出)

举个例子:

firebase.auth().onAuthStateChanged(user=> 
  if(user)
    document.getElementById("id").classList.remove('hide')
    //this will populate your class which associate with above id.
   else
    document.getElementById("id_of_your_div").classList.add('hide')
  
)

我认为可以根据应用程序中的 Firebase 身份验证状态更改使用 removeChildappendChild 方法。

【讨论】:

【参考方案3】:

尝试通过以下方式连接您的代码: var userCurrent = firebase.auth().currentUser;在一个函数中。

注意:请确保您首先登录(作为异步操作),然后将用户数据更新为:

       var authenticationRef = firebase.auth();
    authenticationRef.onAuthStateChanged(function(user) 
        if (user) 
            console.log('onAuthStateChanged : '+user.displayName);
            _updateUser();
         else 
            console.log('Not login');
        
    );

    fucntion _updateUser()
      var userCurrent = firebase.auth().currentUser;
        userCurrent.updateProfile(
        displayName: "Karthik.S",
      ).then(function() 
        var displayName = userCurrent.displayName;
      , function(error) 

      );
  

【讨论】:

以上是关于显示基于 Firebase 身份验证的 DOM 元素的首选方式是啥的主要内容,如果未能解决你的问题,请参考以下文章

使用带有条纹 Firebase 扩展的运行付款时,条纹产品元数据未返回到 Firebase 的经过身份验证的用户实例

使用 Firebase 和 ReactJS 的基于角色的身份验证

Firebase Google 用户未在 Firebase 控制台身份验证中显示

基于角色的身份验证 vue js firebase

即使没有人在 Firebase 上登录,带有 authRequired 元数据的页面仍会显示一瞬间

将 Firebase 身份验证与 Firebase 数据库连接