【问题标题】:nextjs, cookie header not being set on redirectnextjs,未在重定向时设置 cookie 标头
【发布时间】:2021-08-22 20:46:12
【问题描述】:

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

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

  @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 配置吗?

【问题讨论】:

    标签: heroku next.js nestjs vercel


    【解决方案1】:

    经过一番挖掘和测试所有可能的配置,结果证明这不是 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。

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 2020-08-16
      • 2017-07-08
      • 2020-06-27
      • 2014-12-03
      • 1970-01-01
      相关资源
      最近更新 更多