使用protect_from_forgery时,Rails 403 会话响应过期

Posted

技术标签:

【中文标题】使用protect_from_forgery时,Rails 403 会话响应过期【英文标题】:Rails 403 response on session expired when using protect_from_forgery 【发布时间】:2018-01-31 09:31:19 【问题描述】:

用户会话过期后,当向具有protect_from_forgery 的任何控制器发出POSTPUT 请求时,服务器会响应403,而不是注销用户的预期401。

当控制器返回 401 代码时,客户端会将用户重定向回登录屏幕。

我不想在每个 403 上重定向,除非他们的会话过期,否则我不会让用户被踢出。

我试过用谷歌搜索并使用in the doc 描述的不同标志,但没有任何运气。会话过期时如何让protect_from_forgery返回401?

【问题讨论】:

【参考方案1】:

我找不到合适的解决方案,所以我使用了以下技巧:

在客户端,每当服务器返回 403 错误时,我会立即向 API 端点发出 GET 请求,如果会话存在(用户已登录)则返回 200,否则返回 401。

我已经有了将用户重定向到任何 401 错误的登录页面的客户端逻辑。

如果有人有更好的解决方案,不需要拨打秒电话,我会很高兴听到。

【讨论】:

以上是关于使用protect_from_forgery时,Rails 403 会话响应过期的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 为 API 操作跳过protect_from_forgery

Rails:如何在 Rails API 模式下实现protect_from_forgery

Rails 6中的protect_from_forgery?

使用protect_from_forgery with: :exception 但如果会话过期则将用户重定向到登录页面

`protect_from_forgery with: :exception` 是不是会崩溃?

Googlebot 在 Rails 4.1 上导致无效的跨域请求 (COR)