我的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从未设置。
我不确定从哪里开始调试,因为生产服务器上没有控制台输出。
请让我知道要添加的内容,我将进行编辑。
答案 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.
让我很想念我以前从未想到过,但是此设置使我的应用无法正常工作。