使用 Rails API 应用程序发送 HTTPOnly cookie 作为响应
Sending HTTPOnly cookie in response using Rails API application
如果我错了请纠正我,但饼干很特别 Set-Cookie:
headers,对吧?也许我遗漏了一些东西,但对我来说似乎总是如此。如果我设置一个 Rails API 应用程序并希望支持发送 HTTPOnly cookie(例如 headers 还假设我有 CORS 和客户端设置等的所有内容)我应该能够这个正确吗?
基本上,我的问题是:
- 将
ActionDispatch::Cookies
带回我的中间件并在我的应用程序控制器中添加 include ::ActionController::Cookies
是否完全违背了 API 应用程序的目的?
- 如果是,我可以通过 headers 手动发送一个 HTTPOnly cookie 吗?
- 如果是这样,手动管理 cookie headers 会不会更麻烦?如果我真正需要做的只是发送一个 HTTPOnly 刷新令牌,那么我将 cookie 中间件排除在外而不是手动处理它们的好处是什么?
所以我不需要添加任何中间件或包含任何 类 用于 cookie。我可以使用 reponse.set_header
发送 cookie。但是,这只允许您发送一个 Set-Cookie
header,因为它会覆盖您使用 Set-Cookie
作为密钥设置的最后一个 header。相反,您可以访问 response.set_cookie
,这样您就可以在每次 set_cookie
调用时设置多个 cookie。它还带有一些您可以设置的选项,您必须将这些选项添加到您使用 set_header
.
手动发送的 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 存储中。去图吧。
如果我错了请纠正我,但饼干很特别 Set-Cookie:
headers,对吧?也许我遗漏了一些东西,但对我来说似乎总是如此。如果我设置一个 Rails API 应用程序并希望支持发送 HTTPOnly cookie(例如 headers 还假设我有 CORS 和客户端设置等的所有内容)我应该能够这个正确吗?
基本上,我的问题是:
- 将
ActionDispatch::Cookies
带回我的中间件并在我的应用程序控制器中添加include ::ActionController::Cookies
是否完全违背了 API 应用程序的目的? - 如果是,我可以通过 headers 手动发送一个 HTTPOnly cookie 吗?
- 如果是这样,手动管理 cookie headers 会不会更麻烦?如果我真正需要做的只是发送一个 HTTPOnly 刷新令牌,那么我将 cookie 中间件排除在外而不是手动处理它们的好处是什么?
所以我不需要添加任何中间件或包含任何 类 用于 cookie。我可以使用 reponse.set_header
发送 cookie。但是,这只允许您发送一个 Set-Cookie
header,因为它会覆盖您使用 Set-Cookie
作为密钥设置的最后一个 header。相反,您可以访问 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 存储中。去图吧。