【问题标题】:How can one set a cookie with a token using apollo server?如何使用 apollo 服务器设置带有令牌的 cookie?
【发布时间】:2020-05-31 18:41:45
【问题描述】:

我想在用户登录网站后将令牌设置为 cookie。

我找到了这个apollo-server-plugin-http-headers 包。

所以我试图在我的解析器中执行此操作。

async loginUser(_, { loginInput }, context) {
            ...

            const token = generateToken(user);

            context.setCookies.push({
                name: "cookieName",
                value: token,
                options: {
                    httpOnly: true,
                    maxAge: 3600,
                    path: "/",
                    sameSite: true,
                    secure: true
                }
            });

            console.log(context, 123)

            return {
                ...
                token
            }

在设置apollo服务器中

    const httpHeadersPlugin = require("apollo-server-plugin-http-headers");

    const server = new ApolloServer({
    typeDefs,
    resolvers,
    plugins: [httpHeadersPlugin],
    context: {
        setHeaders: new Array(),
        setCookies: new Array(),
    }
});

我在 Chrome 应用程序 -> cookie 中检查浏览器 cookie 选项卡,但没有设置任何内容。我不确定我做错了什么?也许还有其他方法可以做到这一点?

我们将不胜感激所有的帮助

【问题讨论】:

    标签: cookies apollo-server


    【解决方案1】:

    您不能为 localhost 设置 cookie 选项 secure,即在开发模式下。尝试设置secure: process.env.NODE_ENV === 'production'

    即:

    context.setCookies.push({
      name: "cookieName",
      value: token,
      options: {
        httpOnly: true,
        maxAge: 3600,
        path: "/",
        sameSite: true,
        secure: process.env.NODE_ENV === 'production'
      }
    });
    

    试图用模式拼接来做 cookie 对我来说是一个难题。要更深入地了解,您可以check out this repo 使用apollo-server-plugin-http-headers 插件。

    【讨论】:

      猜你喜欢
      • 2023-02-25
      • 2018-02-11
      • 1970-01-01
      • 2019-04-27
      • 2022-06-30
      • 2021-08-24
      • 2017-02-07
      • 2021-04-22
      • 2011-04-21
      相关资源
      最近更新 更多