首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nextjs,未在重定向上设置cookie标头

nextjs,未在重定向上设置cookie标头
EN

Stack Overflow用户
提问于 2021-06-05 03:56:03
回答 1查看 325关注 0票数 0

我已经在vercel上部署了一个nextjs应用程序。它与部署在heroku中的nestjs后端配对。

我通过github实现了登录,在开发应用程序时,我使用以下代码在用户成功通过身份验证后设置了一个jwt头:

代码语言:javascript
复制
  @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就会调用。

当我在localhost上运行所有东西时,这是有效的,但是一旦我将前端应用程序部署到vercel,后端应用程序部署到heroku (并为我的api配置了一个CNAME别名),它就不能工作了。

我的服务器收到来自github的请求,用户被有效地重定向到仪表板,但没有设置cookie。

我做错了什么吗?我是不是错过了一些vercel/nextjs配置?

EN

Stack Overflow用户

回答已采纳

发布于 2021-06-05 16:47:25

在深入研究和测试所有可能的配置之后,事实证明这不是next或nest (或者heroku或vercel)的问题。

默认情况下,Cookie设置在发起请求的同一个域上,包括子域。

在我的例子中,这意味着我的应用程序接口是从api.[DOMAIN].com响应的,而cookie没有到达[DOMAIN].com

当设置cookie时,我必须显式地传递父域:

代码语言:javascript
复制
res.cookie('jwt', accessToken, {
        domain: 'scripthunt.sh',
        sameSite: 'none',
        secure: req.secure || req.headers['x-forwarded-proto'] === 'https',
      });

您可能需要更改express上的其他设置,如:

代码语言:javascript
复制
  app.enable('trust proxy');
  app.enableCors({
    origin: 'https://[MY DOMAIN].com',
    credentials: true,
  });

这可能对Heroku也是必要的,不确定,我所知道的就是我的应用程序现在正确地设置了cookie。

干杯!

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67843287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档