【发布时间】:2019-04-15 16:16:24
【问题描述】:
我正在使用 Devise :timeoutable 模块使会话在一段时间不活动后过期。每个新请求都会重置超时,因此会话到期日期会发生变化。但它只是没有反映在响应客户端发送的expiry 标头中。
我注意到expiry 响应标头对于我发送到服务器的所有 XHR 都是不变的。即使刷新页面后,expiry 标头也不会更新。换句话说,标头的值仅对我登录后发送的第一个请求是正确的,然后它保持不变。
由于 Devise 将 auth 标头附加到开箱即用的每个响应中,因此无需演示相关代码。
响应标题如下所示:
access-token: qK5XalnvENIXJDHGCKJ5_A
Cache-Control: no-cache
client: c-4_msWmyUFD7PwD7fPW5Q
Connection: keep-alive
Content-Encoding: gzip
Content-Type: application/json; charset=utf-8
Date: Mon, 15 Apr 2019 15:52:32 GMT
expiry: 1556548396
Server: nginx
token-type: Bearer
Transfer-Encoding: chunked
uid: user@email.com
Vary: Origin
X-Request-Id: 2fa70ebf-dcf2-4680-8c25-68d7b5e12b1b
X-Runtime: 0.021004
以及请求标头(如果相关):
GET /api/user/context HTTP/1.1
Host: qa.whiz.ai:9060
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
access-token: qK5XalnvENIXJDHGCKJ5_A
client: c-4_msWmyUFD7PwD7fPW5Q
Accept: application/json, text/plain, */*
expiry: 1556548396
uid: user@email.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36
token-type: Bearer
Referer: https://my-page.example.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,uk-UA;q=0.8,uk;q=0.7,ru-UA;q=0.6,ru;q=0.5
Cookie: ...
我尝试从请求标头中删除expiry,但没有效果。
这是预期的行为吗?设计不应该开箱即用地在该标头中发送实际值吗?
我想知道能够在客户端上执行某些操作的实际到期时间。为此,我可以尝试描述here 的解决方案,但如果我可以利用每个响应中已经存在的标头,则会简单得多。
【问题讨论】:
-
好吧,到期标头不用于身份验证。相反,它是一种缓存控制机制,以便客户端可以缓存请求而不会过时。
-
这与设计令牌身份验证有关,不是吗?这是相关来源:github.com/lynndylanhurley/devise_token_auth/blob/master/app/… 但是我完全误解了该标题的目的
标签: ruby-on-rails ruby session devise