【问题标题】:Firebase multiple browser tab authenticateFirebase 多浏览器选项卡进行身份验证
【发布时间】:2013-09-23 11:36:50
【问题描述】:

我正在使用angularFireAuth,并且 angularFireAuth 提供了一个登录的用户变量。假设$scope.user.id 我用它来验证当前用户是否登录。我还使用angularFireAuth.logout() 注销用户。

在单个打开的浏览器选项卡上一切正常。

但它不适用于多个标签。

  • 登录1标签WILL NOT登录其他标签并设置登录variables
  • 退出标签DOES NOT 的1 清除其他标签variables 并注销。

意思是

我打开了 2 个标签,我称之为 标签 A标签 B。当我在 tab A 中注销或登录时。

Tab B 两者都不会。同时,如果我提交需要在 tab b 中验证的内容(该选项卡 A 已经注销)。我仍然可以提交。 (除非我手动刷新)。

【问题讨论】:

  • 你是在调用angularFireAuth.logout()实现注销吗?
  • @Anant 是的。当我登录和注销时。经过身份验证的var 和会话仅适用于单个选项卡。
  • @Anant 我把我的问题更新得更清楚了
  • @vzhen 你运气好吗?

标签: firebase angularfire firebase-security


【解决方案1】:

如果您在返回第二个选项卡时刷新浏览器,则存储在本地存储中的身份验证应该会更新。

您还可以利用本地存储事件与同一域中的其他选项卡和窗口共享事件。在 firebase 的情况下,用户应该在本地存储中自动更新,并启动一个事件。

监听存储更改事件,然后使用 firebase getAuth 或在 angularFireAuth 中调用 getAuth 的 API。

可能看起来像:

function onStorageEvent(storageEvent){
    var authData = ref.getAuth();
    if (authData !== null) {
       // you're logged in
    }
}

为了安全起见,允许您指定应处理的操作或事件的消息传递协议可以隐含使用本地存储(每次存储状态更改时您都会收到一个事件,请确保在您的存储中有一个消息字段可以根据更新该消息数组的事件更新并仅在其他选项卡上完成操作,此处也应涉及更多安全性)。

只有在用户之前注销的情况下才需要共享存储消息,并且其目的是,当在不同的选项卡中完成登录时,所有打开的浏览器选项卡都应更改为登录状态。登录后,TabA 接收到的所有通过 websocket 接收的 firebase 事件也应由 TabB 接收,因此不需要跨页通信。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 2021-12-21
  • 2015-12-23
  • 2012-06-13
相关资源
最近更新 更多