使用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
的任何控制器发出POST
或PUT
请求时,服务器会响应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 但如果会话过期则将用户重定向到登录页面