【问题标题】:React + Express session variable wont persistReact + Express 会话变量不会持续存在
【发布时间】:2020-12-14 10:48:55
【问题描述】:

index.js

if (result) {
   console.log("SESSION1: ", req.session)
   req.session.token = await createAuth(row[0]["user_id"]);
   console.log("SESSION2: ", req.session)
   console.log("logged in!", req.session.token)
   res.send(true);
   return
}

...

app.get("/api/categories", async function(req, res){
    console.log("SESSION5: ", req.session)
    let token = req.session.token;
    console.log("REQUESTING CATEGORIES: ", token)

    ...
});

第一部分取自我的 /login 并打印出来

SESSION1:  Session {
  cookie: {
    path: '/',
    _expires: null,
    originalMaxAge: null,
    httpOnly: true,
    secure: false
  }
}
SESSION2:  Session {
  cookie: {
    path: '/',
    _expires: null,
    originalMaxAge: null,
    httpOnly: true,
    secure: false
  },
  token: 'd90b4976-4c12-4605-80e7-770df1e5e33dAT'
}

logged in! d90b4976-4c12-4605-80e7-770df1e5e33dAT

但是,一旦我在反应中提出这样的请求

    fetch("http://localhost:8081/api/categories", {
      method: "GET",
      headers: {
        "Content-Type": "application/json",
        "Token": 1234,
        Accept: "application/json"
      }
    })
    .then(async resp => {
      resp = await resp.json()
    })
    .then(categoriesResp => {
      console.log("CATEGORIES: ", categoriesResp)
      this.setState({
        categories: categoriesResp
      })
    });

会话令牌未定义,我得到

SESSION5:  Session {
  cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }
}

因此,令牌会话变量不会在此处的请求中持续存在。 我检查了类似的问题并尝试了

  • 设置 cookie:{secure: false}
  • 确保我的服务器没有重新启动 然而,这些事情都没有任何影响,并且产生了同样的问题。 关于如何解决此问题的任何想法?

【问题讨论】:

  • 我不熟悉 Express JS,但我在使用 React Axios 和 Django & Django Rest Framework 的项目中遇到了类似的问题。我刚刚浏览了 fetch API,我发现你必须添加 fetch('example.com:1234/users', { credentials: 'include' }) 并且在快递方面,我猜你必须进行与 CORS 相关的更改。下面的文章可能会有所帮助。 medium.com/zero-equals-false/using-cors-in-express-cac7e29b005b 转到文章中的 HTTP Sessions Over CORS 部分。
  • @AasayAmballi 尝试过这样做并没有改变任何东西,不过谢谢。

标签: node.js reactjs express session


【解决方案1】:

将cors设置为

app.use(cors({
  credentials: true,
  origin: "http://localhost:3000",
}));

并使用

credentials: true

正如@AashayAmballi 所建议的那样确实有效,只是必须确保我将它包含在我的所有请求中,包括初始登录

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 2023-04-03
    • 2013-05-22
    • 2018-03-30
    相关资源
    最近更新 更多