【问题标题】:How to clear an set cookies with Apollo Server如何使用 Apollo Server 清除设置的 cookie
【发布时间】:2021-04-09 19:01:12
【问题描述】:

我最近刚刚从使用 express 与 apollo 服务器切换到仅使用 apollo 服务器,因为订阅设置似乎更最新且更易于设置。我现在遇到的问题是我正在使用我们的刷新令牌保存一个 cookie 用于登录并在注销时清除 cookie。这在我使用 express 时有效。

     const token = context.req.cookies[process.env.REFRESH_TOKEN_NAME!];
     context.res.status(401);

由于从 express/apollo 切换到仅 apollo 服务器,即使我在 apollo 服务器上公开 req/res 上下文,我也无法访问 req.cookies

我最终切换到这个(这很hacky)来获取cookie。

      const header = context.req.headers.cookie
      var cookies = header.split(/[;] */).reduce(function(result: any, pairStr: any) {
        var arr = pairStr.split('=');
        if (arr.length === 2) { result[arr[0]] = arr[1]; }
        return result;
      }, {});

这可行,但现在我不知道如何删除 cookie。用快递我在做

context.res.clearCookie(process.env.REFRESH_TOKEN_NAME!);

由于 res.clearCookie 不存在,我现在不确定如何清除 cookie。

【问题讨论】:

    标签: node.js cookies graphql apollo apollo-server


    【解决方案1】:

    只需将完全相同的 cookie 发送回客户端,并将 Expires 属性设置为过去的某个日期。请注意,关于 cookie 其余部分的所有内容都必须完全相同,因此请务必保留所有原始 cookie 属性。

    还有,这里有一个指向此主题的RFC itself 的链接:

    最后,为了移除一个cookie,服务器返回一个Set-Cookie header 过期日期在过去。服务器会成功 仅当 Path 和 Domain 属性在 Set-Cookie 标头匹配 cookie 时使用的值 已创建。

    至于如何做到这一点,如果你使用 Node 的 http 模块,你可以使用类似这样的东西(假设你有一个来自传递给 http.createServer 的回调的 response):

    context.response.writeHead(200, {'Set-Cookie': '<Your Cookie Here>', 'Content-Type': 'text/plain'});
    

    这是假设您的 context 可以访问它可以写入的 http response

    为了清楚起见,您可以查看Express does it herehere

    【讨论】:

      猜你喜欢
      • 2022-06-30
      • 2021-07-31
      • 2019-08-22
      • 2019-09-11
      • 2020-03-20
      • 2013-01-02
      • 2020-05-31
      • 2014-11-20
      • 1970-01-01
      相关资源
      最近更新 更多