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