Cookie已在Dev中设置,但未在Prod中设置

时间:2019-02-23 17:02:38

标签: javascript database graphql apollo

我的graphql / apollo服务器具有以下突变:

  async signup(parent, args, ctx, info) {
    args.email = args.email.toLowerCase();
    const password = await bcrypt.hash(args.password, 10);
    const user = await ctx.db.mutation.createUser(
      {
        data: {
          ...args,
          password,
          permissions: { set: ["USER"] }
        }
      },
      info
    );

    const token = jwt.sign({ userId: user.id }, process.env.APP_SECRET);

    ctx.response.cookie("token", token, {
      httpOnly: true,
      maxAge: 1000 * 60 * 60 * 24 * 365 // 1 year cookie
    });

    return user;
  },

在本地开发期间,新用户注册后即会设置cookie。这将有助于立即登录新用户。但是,一旦推送到Now&Heroku,就在数据库中创建了用户,但cookie从未设置。

我不确定从哪里开始调试,因为生产服务器上没有控制台输出。

请让我知道要添加的内容,我将进行编辑。

2 个答案:

答案 0 :(得分:0)

当我在与我的应用程序域不同的域或端口上托管GraphQL API时,我也遇到了这个问题。如果是这种情况,则在设置Cookie时需要设置domain选项,如下所示:

ctx.response.cookie("token", token, {
  httpOnly: true,
  maxAge: 1000 * 60 * 60 * 24 * 365 // 1 year cookie
  domain: 'your-app-domain.com',
});

我希望这对您有帮助

答案 1 :(得分:0)

这里适合所有像我这样拥有金色时刻的人们。 在多种不同的浏览器中,有一种设置有效地阻止了cookie的设置。

Chrome设置称为

Block third-party cookies
Prevent third-party websites from saving and reading cookie data.

让我很想念我以前从未想到过,但是此设置使我的应用无法正常工作。