1

如果我错了,请纠正我,但 cookie 只是特殊的Set-Cookie:标题,对吗?也许我错过了一些东西,但对我来说似乎总是如此。如果我设置了 Rails API 应用程序并希望支持发送 HTTPOnly cookie(例如,标头还假设我有 CORS 和客户端设置上的所有内容等)我应该能够正确地做到这一点吗?

基本上,我的问题是:

  1. 带回ActionDispatch::Cookies我的中间件并添加include ::ActionController::Cookies我的应用程序控制器是否完全违背了 API 应用程序的目的?
  2. 如果是这样,我可以手动通过标头发送 HTTPOnly cookie 吗?
  3. 如果是这样,手动管理 cookie 标头是否更麻烦?如果我真正需要做的只是发送一个 HTTPOnly 刷新令牌,那么我是否将 cookie 中间件排除在外来权衡手动处理它们?
4

1 回答 1

2

所以我不需要添加任何中间件或包含任何 cookie 类。我可以reponse.set_header用来发送cookie。但是,这只允许您发送一个Set-Cookie标头,因为它会覆盖您设置Set-Cookie为键的最后一个标头。相反,您可以访问response.set_cookie哪一个,您可以在每次set_cookie调用时设置多个 cookie。它还带有一些选项,您可以设置这些选项,您必须将这些选项添加到您手动发送的标头的值中set_header

这是我使用的一个允许我发送 cookie 的示例:

response.set_cookie(
  :jwt,
  {
    value: 'this could be a token or whatever cookie value you wanted.',
    expires: 7.days.from_now,
    path: '/api/v1/auth',
    httponly: true
  }
)

检查此方法的文档以获取其他选项,因为还有其他选项。

编辑:我遇到了一个问题,cookie 在响应中被发送但没有保存(仍然)。它没有出现在 cookie 存储中,所以我更改了 cookie 的发送路径,/然后它就出现了。我删除了它,然后将 cookie 的路径更改为/my/real/path,它工作并存储在 cookie 存储中。去搞清楚。

于 2020-01-21T02:22:00.203 回答