nextjs,cookie header 未在重定向时设置
nextjs, cookie header not being set on redirect
我在 Vercel 上部署了一个 nextjs 应用程序。它与部署在 heroku 中的 nestjs back-end 配对。
我通过 github 实现了登录,并且在开发应用程序时,我使用以下代码在用户成功通过身份验证后设置了一个 jwt header:
@Get('redirect')
@UseGuards(AuthGuard('github'))
async githubAuthRedirect(@Req() req, @Res() res) {
const accessToken = await this.authService.generateJWT(req.user);
res.cookie('jwt', accessToken);
res.redirect(`http://localhost:3000/dashboard`);
}
这是端点 github 在用户批准访问他们的帐户后调用。
这在我 运行 本地主机上的所有内容时有效,但是一旦我将 front-end 应用程序部署到 vercel,back-end 应用程序到 heroku(并为我的 api) 那就不行了。
我的服务器收到来自 github 的请求,用户被有效地重定向到仪表板,但没有设置 cookie。
我是不是做错了什么?我错过了一些 vercel/nextjs 配置吗?
经过一番挖掘和测试所有可能的配置后,事实证明这不是 next 或 nest(或 heroku 或 vercel)的问题。
Cookie 默认设置在与您的请求相同的域中,包括子域。
在我的例子中,这意味着我的 API 从 api.[DOMAIN].com
响应并且 cookie 没有到达 [DOMAIN].com
。
设置 cookie 时,我必须明确传递父域:
res.cookie('jwt', accessToken, {
domain: 'scripthunt.sh',
sameSite: 'none',
secure: req.secure || req.headers['x-forwarded-proto'] === 'https',
});
您可能需要更改 express 上的其他设置,例如:
app.enable('trust proxy');
app.enableCors({
origin: 'https://[MY DOMAIN].com',
credentials: true,
});
这对于 Heroku 可能也是必需的,不确定,我所知道的是我的应用程序现在可以正确设置 cookie。
干杯!
我在 Vercel 上部署了一个 nextjs 应用程序。它与部署在 heroku 中的 nestjs back-end 配对。
我通过 github 实现了登录,并且在开发应用程序时,我使用以下代码在用户成功通过身份验证后设置了一个 jwt header:
@Get('redirect')
@UseGuards(AuthGuard('github'))
async githubAuthRedirect(@Req() req, @Res() res) {
const accessToken = await this.authService.generateJWT(req.user);
res.cookie('jwt', accessToken);
res.redirect(`http://localhost:3000/dashboard`);
}
这是端点 github 在用户批准访问他们的帐户后调用。
这在我 运行 本地主机上的所有内容时有效,但是一旦我将 front-end 应用程序部署到 vercel,back-end 应用程序到 heroku(并为我的 api) 那就不行了。
我的服务器收到来自 github 的请求,用户被有效地重定向到仪表板,但没有设置 cookie。
我是不是做错了什么?我错过了一些 vercel/nextjs 配置吗?
经过一番挖掘和测试所有可能的配置后,事实证明这不是 next 或 nest(或 heroku 或 vercel)的问题。
Cookie 默认设置在与您的请求相同的域中,包括子域。
在我的例子中,这意味着我的 API 从 api.[DOMAIN].com
响应并且 cookie 没有到达 [DOMAIN].com
。
设置 cookie 时,我必须明确传递父域:
res.cookie('jwt', accessToken, {
domain: 'scripthunt.sh',
sameSite: 'none',
secure: req.secure || req.headers['x-forwarded-proto'] === 'https',
});
您可能需要更改 express 上的其他设置,例如:
app.enable('trust proxy');
app.enableCors({
origin: 'https://[MY DOMAIN].com',
credentials: true,
});
这对于 Heroku 可能也是必需的,不确定,我所知道的是我的应用程序现在可以正确设置 cookie。
干杯!