我正在使用angularFireAuth
,angularFireAuth提供了登录的用户变量。让我们说$scope.user.id
并使用它来验证当前用户是否已记录。我还使用angularFireAuth.logout()
注销用户。
在一个打开的浏览器标签页上,一切正常。
但它不适用于多个标签。
WILL NOT
的登录1登录其他选项卡并设置登录的variables
DOES NOT
的退出1清除其他标签variables
并退出。所以这意味着
我打开了2个标签,我称之为标签A 和标签B 。当我退出或登录标签A 时。
标签B 也不会这样做。同时,如果我在标签b (标签A已经注销)中提交了需要验证的内容。我仍然可以提交。 (除非我手动刷新)。
答案 0 :(得分:0)
如果在返回第二个选项卡时刷新浏览器,则应更新存储在本地存储中的身份验证。
您还可以利用本地存储事件与同一域中的其他选项卡和窗口共享事件。对于firebase,用户应自动在本地存储中更新,并启动事件。
侦听存储更改事件,然后使用firebase getAuth或在angularFireAuth中调用getAuth的API。
看起来像:
function onStorageEvent(storageEvent){
var authData = ref.getAuth();
if (authData !== null) {
// you're logged in
}
}
为了安全起见,允许您指定应该处理的操作或事件的消息传递协议可以用来使用本地存储(每次存储状态更改时您都会收到一个事件,确保在存储中有一个消息字段可以根据更新该消息数组的事件更新并仅在其他选项卡上完成操作,此处也应该涉及更多安全性。
仅在用户先前已注销的情况下才需要共享存储消息传递,并且打算在其他选项卡中完成登录时,打开的所有浏览器选项卡都应更改为登录状态。登录后,TabB收到的websocket上的所有firebase事件也应由TabB接收,这样就不需要进行intertab通信。