gpt4 book ai didi

express - (Next.js,Express session )在 getInitialProps 内发出的每个请求的新 session

转载 作者:行者123 更新时间:2023-12-02 10:32:19 25 4
gpt4 key购买 nike

我正在尝试制作Express sessionNext.js 合作,并且已在客户端成功完成此操作,但我在 getInitialProps 内部进行的 API 调用时遇到了问题。

注意:我正在使用isomorphic-unfetch进行 API 调用。我的 Next.js 安装在 localhost:3000 上运行,我的 Express 服务器在 localhost:5000 上运行。

以下是客户端 API 调用的示例(在 getInitialProps 之外):

componentDidMount() {
fetch('/path/to/endpoint', {
method: 'GET',
credentials: 'include',
}).then((res) => console.log(res));
}

我在这里记录资源是因为我想查看标题。结果这个请求有一个空的 headers 对象。如果我兑现了 promise ,我就会得到我请求的数据。即使我刷新页面,此调用的 session ID 在服务器上也保持一致。这里一切都按预期进行。

以下是 getInitialProps 内部 API 调用的示例:

static async getInitialProps(ctx) {
fetch('/path/to/endpoint', {
method: 'GET',
credentials: 'include',
}).then((res) => console.log(res.headers));
}

再次记录以查看 header 。该响应有标题,它们看起来像这样:

Headers {
_headers:
{ 'x-powered-by': [ 'Express' ],
'access-control-allow-origin': [ 'http://localhost:3000' ],
vary: [ 'Origin, Accept-Encoding' ],
'access-control-allow-credentials': [ 'true' ],
'x-frame-options': [ 'SAMEORIGIN' ],
'x-xss-protection': [ '1; mode=block' ],
'set-cookie'['YgJGcZPBgbE_nEqqLZpw0ba0pyaf2eNS','connect.sid=s%3AYgJGcZPBgbE_nEqqLZpw0ba0pyaf2eNS.Oye%2F7%2BsyXrrLJwphEJ3nq3yMkBhM3%2Fm4PCl9KIV%2FTzA; Path=/; Expires=Sun, 05 Aug 2018 15:56:52 GMT; HttpOnly' ],
'content-type': [ 'application/json; charset=utf-8' ],
'content-length': [ '246' ],
etag: [ 'W/"f6-82FKQ+ERtkxLiKa8hEIeY4kgGgE"' ],
date: [ 'Sun, 22 Jul 2018 15:56:52 GMT' ],
connection: [ 'close' ] } }

正如你所看到的,我的 set-cookie header 中有 connect.sid (快速 session ID),但问题是每当我刷新页面时 connect.sid cookie 都会更改并且与客户端的 session ID 不匹配API 调用(即使刷新页面后也保持不变)。

我在 Express 服务器上的 session 对象如下所示:

app.use(
session({
resave: false,
name: 'connect.sid',
saveUninitialized: false,
secret: SESSION_SECRET,
unset: 'destroy',
cookie: {
maxAge: 3600000 * 24 * 14,
secure: false,
},
store: new MongoStore({
url: mongoUrl,
autoReconnect: true,
}),
})

);

如果有人知道如何从 getInitialProps 内部进行 API 调用并与快速 session 配合使用,我将不胜感激!预先感谢您。

最佳答案

我找到了解决方案。我必须在请求 header 中发送 session cookie,而不是使用 credentials: 'include'。这是 getInitialProps 中的一个工作请求。

static async getInitialProps(ctx) {
const res = await fetch('path/to/endpoint', {
headers: {
cookie: ctx.req.headers.cookie,
},
});
const user = await res.json();

return { user };
}

关于express - (Next.js,Express session )在 getInitialProps 内发出的每个请求的新 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51466982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com