首页 > 解决方案 > 使用 graphiql 时设置的 Cookie,但在使用前端时没有设置

问题描述

我正在尝试将我的令牌保存在后端的 cookie 中。当我使用 graphiql 检查我的函数时,令牌会保存,当我询问时我会得到它(context.cookies.token)。但是后来我从我的前端尝试它,并且 cookie 没有保存(并且没有出现在我的 dev-tools -> 应用程序中)。当我尝试使用 context.cookies.token 获取它时,我没有定义。

我的登录功能(这里我想将我的令牌保存在 cookie 中并在其他功能中使用它,但这次我正在检查此功能中的所有进程)

const login = async (parent, args, context, info) => {
    coenter code herenst sql = `SELECT * FROM user WHERE username = "${args.username}"`;
    const results = await context.dbService.runSQL(sql);
    const user = results[0]
    if (!user) throw new Error('Invalid username or password');
    const valid = await bcrypt.compare(args.password, user.password);
    if (!valid) throw new Error('Invalid username or password');
    const token = jwt.sign({ userId: user.id }, APP_SECRET);
    context.res.cookie('token', token, {maxAge: 3600000});
    console.log('cookies', context.cookies.token);
    return {
        token,
        user
    };
};

在返回前的最后两行,我保存了令牌 - 仅当我在 graphiql 工具中检查它时,此行才有效。并尝试从“req.cookies.token”(上下文包括所有 req 属性)中获取它,在 graphiql 中,我在这里获取令牌,当 req 来自前端时,我得到了 undefined

请帮我解决这个问题。我尝试了 async-await 和没有,httpOnly 和没有。我的后端在 localhost:3030 上运行,我的前端在 localhost:3000 上运行。我正在打开我的 localhost:3030 并且在我的开发工具 -> 应用程序 -> cookie 中看不到任何内容。

谢谢!

标签: javascriptnode.jscookiesgraphql

解决方案


推荐阅读