ruby-on-rails - Rails Devise SSL session 在生产环境中混淆

标签 ruby-on-rails ssl https ruby-on-rails-3.1 devise

我已经使用 Capistrano、nginx/将我的应用程序部署到 Ubuntu VPS 乘客和通配符 SSL 证书。

该应用程序在开发和我的暂存环境上运行良好 Heroku。

但是,当用户登录时,在生产环境中存在两个问题 使用安全页面的网站。

  1. 在最新的 Chrome 和 Firefox 上,浏览器开始强制执行 HTTPS 每次请求每个请求。不管用户是否 登录与否。即使我在 nginx 上禁用 SSL,浏览器仍会尝试 HTTPS 并提示它无法连接。主页提供一些不安全的动态嵌入 项目并使用不安全的 CDN,所以我想将该页面作为非 SSL。每当我尝试通过以下方式将页面重定向到非 SSL 时 nginx 重写或 Rails 中的前过滤器会导致无限 重定向循环。

  2. Safari 没有第一个问题,因为它尊重这两个问题 HTTPS 和 HTTP 请求。但是,当用户登录并 浏览到非 SSL 页面 他们已注销或失去 session 立即。

有没有人以前遇到过这样的问题,或者对我如何诊断/解决问题有想法?

谢谢

最佳答案

您是使用 Rails 3.1 force_ssl 来启用 SSL 还是 gem?

启用 HTTPS 时,您还启用了 HTTP Strict Transport Security标志,浏览器使用它在将请求发送到服务器之前立即转到该域上的任何 HTTPS 页面。

在 Chrome 上,在您的浏览器中输入 chrome://net-internals/#hsts 然后您可以从 HSTS 列表中删除您的域,这应该会为 Chrome 修复它。不能代表 Firefox,因为我不经常使用它。

丢失 session 的问题很可能是因为 Rails 将身份验证 cookie 设置为安全的,这意味着它们只针对 HTTPS 请求而不是 HTTP 发送。确保 Rails 中的 cookie_options 未设置 :secure => true。还要检查 Devise cookie_options 设置以确保未设置 :secure => true

关于ruby-on-rails - Rails Devise SSL session 在生产环境中混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8704598/

相关文章:

amazon-web-services - AWS S3、CloudFront 和 SSL

php - PayPal IPN 监听器 - SSL 证书握手失败

ssl - 无法使用 Nexus 通过 https/ssl 代理 Maven 存储库

ruby-on-rails - 简化和正确的 RSpec Controller 测试

ruby-on-rails - 如何在不退出 IRB session 的情况下退出调试器?

php - Stripe s2Member Pro 插件在实时模式下返回 card_declined

android - 如何通过 https 信任所有使用 Android DownloadManager 的主机

javascript - 不匹配协议(protocol)的最佳方法/解决方法 - http/https 之间的通信

ruby-on-rails - 升级到 Rails 4.1.1 后未定义的辅助方法

ruby-on-rails - 无需通过路由即可测试 Controller