如何解决如何使用 Apollo Server 清除设置的 cookie
我最近刚从使用 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!);
我现在不知道如何清除 cookie,因为 res.clearCookie 不存在。
解决方法
只需将完全相同的 cookie 发送回客户端,并将 Expires
属性设置为过去的某个日期。请注意,关于 cookie 其余部分的所有内容都必须完全相同,因此请确保也保留所有原始 cookie 属性。
而且,这里有一个指向此主题的 RFC itself 的链接:
最后,要移除一个cookie,服务器返回一个Set-Cookie头 具有过去的到期日期。服务器会成功 仅当 Path 和 Domain 属性在删除 cookie Set-Cookie 标头匹配 cookie 时使用的值 已创建。
至于如何做到这一点,如果您使用的是 Node 的 http
模块,您可以使用类似这样的东西(假设您有一个 response
来自传递给 {{1} }):
http.createServer
这是假设您的 context.response.writeHead(200,{'Set-Cookie': '<Your Cookie Here>','Content-Type': 'text/plain'});
可以访问它可以写入的 http context
。
为了清楚起见,您可以查看 Express does it here 和 here 的说明。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。