首页 文章

React Redux - 存储登录的用户详细信息

提问于
浏览
2

我很困惑在React / Redux应用程序中存储登录用户详细信息的最佳位置,这样我就可以访问每条路径上 Headers 中的名字和姓氏 .

我有用户api密钥(JWT)存储在localStorage中,但我认为由于XSS漏洞,在localStorage中存储名字,姓氏,电子邮件等内容是不好的做法 .

我宁愿不在每条路线上点击API只是为了返回相同的用户详细信息 .

我尝试将它们作为session.user存储在redux存储中,当我进行页面刷新或手动更改URL时,它会被取消 . (通过redux saga改变路线时保留商店 push

如何存储多个路由和页面刷新时使用的名字,姓氏等?

4 回答

  • 0

    我的建议是当用户登录您的网站,为他们创建会话标识符并将其存储在加密签名的cookie中 . 确保您的Web框架使用的任何cookie库都设置了httpOnly cookie标志 . 此标志使浏览器无法读取任何cookie,这是为了安全地使用cookie的服务器端会话所必需的 . 确保您的cookie库还设置SameSite = strict cookie标志(以防止CSRF攻击),以及secure = true标志(以确保cookie只能通过加密连接设置) . 每次用户向您的站点发出请求时,请使用他们的会话ID(从他们发送给您的cookie中提取)从数据库或缓存中检索他们的帐户详细信息(取决于您的网站的大小)

  • 1

    Redux会将数据存储在浏览器内存中,如果您进行全面刷新,它将会丢失 .

    如果您想要在刷新后保留数据,则可以将redux存储持久保存到浏览器会话存储https://github.com/ilyagelman/redux-sessionstorage

    否则,您可以在会话存储的所有页面中保存所需的数据,而无需通过redux .

  • -1

    如果没有将这些信息实际存储在localstoarge中,我只能想到实现这一目的的一种方法 . 您的顶级组件将在每次浏览器刷新时重新安装,因此在该组件安装时,您可以启动从服务器获取此信息并将其存储在redux存储中的请求 .

  • 0

    Redux全局状态在页面刷新时初始化 . 您需要在 localStorage 中保存userDetails,以便即使刷新页面后它也可以在所有路径中使用 . 这是你如何做到这一点:

    设置localstorage:

    const userDetails = {userName: "foo", pass: "bar"}
     localStorage.setItem('userDetails', JSON.stringify(userDetails));
    

    从localStorage访问userDetails:

    const userDetils = JSON.parse(localStorage.getItem( 'userDetails'));
    

相关问题