将Firebase用户凭证令牌存储在本地或会话存储中是否安全?

时间:2020-02-11 13:50:51

标签: javascript firebase firebase-authentication

为了提高我的react应用在页面重新加载时的性能,我将用户凭据存储在本地存储中,并在注销时清除它们。但是这些天用户通常不注销,并且用户凭据可以在本地存储中保留很长时间,我认为这会导致一些安全漏洞?我不是Firebase安全专家,所以有人可以解释它是否安全吗?

firebase.auth().onAuthStateChanged(user=>{
    if (user) {
        localStorage.setItem('user', JSON.stringify(user));
    } else {
        localStorage.removeItem('user');
    }
})

2 个答案:

答案 0 :(得分:1)

在大多数平台上,Firebase身份验证SDK已经自动将用户的凭据存储在本地存储中,并在应用重新启动/页面重新加载时从本地存储中重新加载。在onAuthStateChanged触发之前,您仍然看到页面重新加载延迟的原因是,客户端与服务器进行了检查以查看凭据是否仍然有效。

一个简单的解决方法是,当页面加载时, Firebase检查凭据时,可以立即采取行动,该方法是自己将有关最后一个已知身份验证状态的值存储在本地存储中,并使用该值确定您的初始操作。本质上,这就是您对问题中的user对象所做的事情。

这没什么不对,只要您了解onAuthStateChanged第一次触发时,数据可能就与您存储的数据不同。通常不会,但是可以,这就是Firebase必须首先检查凭据的全部原因。

也可以从昨天看到我对这个相关问题的回答:Firebase auth.currentUser is null when loading the page, user loaded when authstatechange called after some milli seconds of page load

答案 1 :(得分:0)

我建议将持久性更改为 Persistent.SESSION

firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION)

是的,这并没有涵盖整个问题(因为用户也可能不会关闭浏览器)但它是有道理的。