我有一个在端口 12003 上运行的 Rails 5 应用程序,我配置了一个子域以透明地重定向到该端口,如下所示:
https://test.example.com => https://example.com:12007
问题是,当我尝试登录或执行需要来自子域的真实性 token 的操作时,应用程序会抛出此错误:
ActionController::InvalidAuthenticityToken in AccessController#attempt_login
当我尝试从包含端口的 url 执行操作时,应用程序不会抛出它:http://example.com:12007
这让我认为该应用将子域检测为伪造尝试。
有没有办法在不禁用我的应用程序的 CSRF 保护的情况下将子域列入白名单或解决此问题?
最佳答案
我在 Rails 5、Devise 和 Nginx 与 SSL 的组合中遇到了类似的问题。
简单地关闭 CSRF 保护会导致无法通过设计登录/登录( session 未更改,登录重定向回 root,就好像什么都没发生一样)。
使用 curl
我测试了这仅在 HTTPS 上存在问题,但在 HTTP 上一切正常。
最终为我解决了这个问题的唯一线路是
server {
location @app {
...
proxy_set_header X-Forwarded-Proto https;
...
}
}
在 Nginx 站点配置中(/etc/nginx/sites-available/default
)。
关于ruby-on-rails - 尝试从透明重定向的子域登录时,Rails 5 的真实性 token 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41192874/