ruby-on-rails - 尝试从透明重定向的子域登录时,Rails 5 的真实性 token 无效

标签 ruby-on-rails ruby subdomain csrf

我有一个在端口 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 5DeviseNginxSSL 的组合中遇到了类似的问题。

简单地关闭 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/

相关文章:

ruby - Rails Redis 将计数器重置为 0

php - 来自子域的空 MySQL 查询结果

php - 在 Ruby 和 PHP 之间共享 session

java - 在Java中获取没有子域的域?

mysql - 如何清除 session

sql - 如何列出用户可用的所有任务?

Ruby 临时文件#tap : What class defines this method and what is it for?

ruby-on-rails - 路由错误 - 没有新的路由与 [POST] 匹配

ruby-on-rails - 如何在 ActiveAdmin 菜单或标题中添加输入搜索字段

ruby - 为什么 Ruby 的 bcrypt 库在散列中以明文形式包含盐?