reactjs 为什么安全本地存储有时返回null?

lymnna71  于 2023-02-22  发布在  React
关注(0)|答案(1)|浏览(166)

大家好,我正在使用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。

4xrmg8kj

4xrmg8kj1#

该库的设计方式是,首先它为浏览器创建一个指纹,这是通过检查大量的参数,包括浏览器宽度用户代理等,然后通过使用这个密钥,该库将尝试解密所有存储在本地存储中的数据,如果它无法解密任何数据,它将简单地跳过数据,默认情况下,它不会从本地存储中删除
因此,当我们通过inspect/tool将浏览器更改为移动视图时,浏览器属性将发生变化,特别是最大宽度和用户代理,因此,当我们刷新网站时,库将创建一个安全密钥,但这一次将与上次不同,因此它不会解密数据。
因此,当我们将最敏感的数据保存在安全的本地存储器上时,当数据不存在时,我们需要假设浏览器已经被入侵,这应该是预期的行为。这也应该反映在我们处理数据的方式上。
例如:如果我们正在保存用于向平台验证用户身份的auth令牌和其他用户参数。如果数据不存在,我们应注销用户

编辑

此问题已在react-secure-storage@1.1.0的最新版本中得到修复

相关问题