当前位置: 首页 > 知识库问答 >
问题:

刷新使用户在基于react、redux、nodejs和cookie的身份验证中注销

山阳辉
2023-03-14
router.post("/api/users/login", async (req, res) => {
  try {
    const user = await User.findbyCreds(req.body.email, req.body.password);
    const token = await user.createToken();
    res.cookie("token", token, {
      // maxAge: 60 * 60 * 1000,
      httpOnly: true,
      // secure: true,
      // sameSite: true,
    });
    res.send({ user, token });
  } catch (e) {
    res.status(400).send(e);
  }
});

这是我在服务器端(nodejs)上的登录路由,通过制作一个cookie并将其传递给浏览器来处理所有进一步的请求,它工作得很好。

export const loginUser = (formValues) => async (dispatch) => {
  const user = await axios.post("/api/users/login", formValues);
  dispatch({
    type: "LOGIN_USER",
    payload: user.data,
  });
  history.push("/");
};

这是我的redux操作,它调用服务器forlogin请求,它也运行良好,它将用户信息传递到redux状态,我将进一步使用该状态。

问题是,当我刷新网页时,redux状态变为空,并且redux状态的用户中存储的值变为null,而我希望它仍然存在,这样用户就不应该再次登录&在刷新后再次登录。而且我的cookie在我刷新后仍然在浏览器中。

共有1个答案

闻华容
2023-03-14

有一些外部库,如redux-persist、async-storage,它处理在启动期间对存储进行重新水合以处理页面刷新。但在内部它们都使用浏览器的localStorage来存储和检索密钥。

>

  • 在reducer上创建初始状态,将userAuthenticated标志设置为false,将isAppLoaded标志设置为false。

    让initialState={isAppLoaded:false,userAuthenticated:false}

    在app.js文件的componentDidMount上,查找isAppLoaded标志值,并从localstorage更新userAuthenticated标志。

    componentdidmount=()=>{if(!this.props.isAppLoaded){let token=localstorage.get('token');}//分派操作更新userAuthenticated和isAppLoaded的存储}

  •  类似资料:
    • 我想知道socket.io身份验证的最佳实践是什么。 Alice发出事件'message',参数包括Bobs、唯一标识符等。Bob在监听Socket.on('message')事件时接收消息。

    • null 我的自定义rest筛选器: 上面的内容实际上会导致应用程序启动时出现一个错误:有人能告诉我如何最好地执行此操作吗?pre_auth筛选器是执行此操作的最好方法吗? 编辑 使用Spring-security实现解决方案 希望它能帮助其他人…

    • 我读了一些关于“JWT vs Cookie”的帖子,但它们只会让我更加困惑…… > 我想澄清一下,当人们谈论“基于令牌的身份验证与cookie”时,这里的cookie仅指会话cookie?我的理解是,cookie就像一个介质,它可以用来实现基于令牌的身份验证(在客户端存储可以识别登录用户的东西)或者基于会话的身份验证(在客户端存储与服务器端会话信息匹配的常量) 为什么我们需要JSON web令牌?

    • 我一直在寻找使用各种AWS服务来处理我们下一个主要项目的基础设施。我们开始研究EC2实例上的docker容器,但在进一步研究AWS Lambda之后,这似乎是一条值得探索的道路。 使用AWS Lambda范例,我们只需使用Lambda函数作为逻辑粘合剂,将数据和事件(来自其他AWS服务)保存在一起。 例如,如果我们产品的用户创建了一个新记录,AWS Lambda可以在该事件中触发,我们可以调用La

    • LDAP的基础是什么?如果在配置期间没有给出任何基数。 我必须从基于web的应用程序验证/验证用户,并且我有java代码。 但是我需要为此建立基础(变量),我已经让另一个团队告诉我基础,他们说我们没有在LDAP上定制任何东西。LDAP的默认基数是什么?

    • 有人能给我一个逐步描述如何基于cookie的身份验证工作吗?我从来没有做过任何涉及身份验证或cookie的事情。浏览器需要做什么?服务器需要做什么?按什么顺序?我们怎么保证东西安全?