大家好,我正在使用firebase google auth,我正在安全本地存储中存储数据。我正在检查用户是否存在于每个路由上,方法是从本地存储中获取用户,应用程序工作正常,但有时我的安全本地存储userData对象返回空值。但在应用程序选项卡中,本地存储userData对象存在。
import secureLocalStorage from 'react-secure-storage'
const PrivateRoute = ({ children, route }) => {
const ability = useContext(AbilityContext)
const user = JSON.parse(secureLocalStorage.getItem('userData'))
if (!user) {
console.log("In navigate to login")
console.log(JSON.parse(secureLocalStorage.getItem('userData')))
console.log(user)
return <Navigate to='/login' />
}
}
如果用户不存在,应用程序将导航到登录页面。刷新页面时有时会出现这种情况。
我还附上了本地存储为空时控制台选项卡的屏幕截图。
以及应用程序选项卡的屏幕截图,其中安全本地存储userData对象实际上存在于其中,但返回Null。
1条答案
按热度按时间4xrmg8kj1#
该库的设计方式是,首先它为浏览器创建一个指纹,这是通过检查大量的参数,包括浏览器宽度用户代理等,然后通过使用这个密钥,该库将尝试解密所有存储在本地存储中的数据,如果它无法解密任何数据,它将简单地跳过数据,默认情况下,它不会从本地存储中删除
因此,当我们通过inspect/tool将浏览器更改为移动视图时,浏览器属性将发生变化,特别是最大宽度和用户代理,因此,当我们刷新网站时,库将创建一个安全密钥,但这一次将与上次不同,因此它不会解密数据。
因此,当我们将最敏感的数据保存在安全的本地存储器上时,当数据不存在时,我们需要假设浏览器已经被入侵,这应该是预期的行为。这也应该反映在我们处理数据的方式上。
例如:如果我们正在保存用于向平台验证用户身份的auth令牌和其他用户参数。如果数据不存在,我们应注销用户
编辑
此问题已在
react-secure-storage@1.1.0
的最新版本中得到修复