Express 会话不会在来自 React 前端的 api 次调用之间持续存在

Express session not persisting between api calls from react front end

在问这个问题之前,我确实看过其他类似的问题,但其中 none 个已经对您有所帮助。

我有一个使用 axios 的反应前端,使用 express 和 express 会话对节点后端进行 api 调用。在我的前端输入登录信息后,我将它发送到我的后端,在那里我设置了一个会话和 return 对我在 localStorage 中设置的前端的响应以用于客户端验证。

登录后,当我尝试从前端访问受保护的 api 端点时,会话中没有我设置的任何信息,因此出现错误。但是,如果我尝试从邮递员登录并访问受保护的端点,它工作得很好。

这是我的快速会话配置:

router.use(session({
 secret: 'notGoingToWork',
 resave: false,
 saveUninitialized: true
}))

这是我通过 axios 进行的 api 调用(登录后):

axios.get(`http://localhost:5000/users/personNotes/${JSON.parse(userData).email}`)
    .then(response => console.log(response);

我不知道问题出在哪里,希望得到任何帮助。提前致谢!

尝试使用 withCredentials

axios(`http://localhost:5000/users/personNotes/${JSON.parse(userData).email}`, {
  method: "get",
  withCredentials: true
})

axios.defaults.withCredentials = true

您可以使用 axios 尝试 withCredentialstrue

对于 fetchcredentialsinclude 也可以。

fetch(URL, 
 {
  credentials: 'include',
  method: 'POST',
  body: JSON.stringify(payload),
  headers: new Headers({
  'Content-Type': 'application/json'
 })
})

将 fetch 与

一起使用
credentials: 'include'

我还必须在 Express App.js 中添加以下内容。

请注意,'Access-Control-Allow-Origin' 无法使用凭据设置为“*”。它必须使用特定的域名。

res.setHeader(
        'Access-Control-Allow-Origin',
        'http://localhost:3000'
    );
res.setHeader('Access-Control-Allow-Credentials', 'true');