Rails 3.1强制常规HTTP

ghe*_*ton 14 ssl rack ruby-on-rails

以前,我一直在使用ssl_requirement来对我们通过ssl提供服务的页面进行细粒度控制,并通过纯http提供服务.

根据ssl_requirement自己的wiki,它已被rails 3.1的Force SSL 取代.然而,情况似乎并非如此.强制SSL似乎没有暴露出相反方向的选项,没有办法强制页面通过常规http发送.

什么是正确的Rails 3.1方式强制页面以纯http显示?Force SSL真的取代了ssl_requirement吗?

Joo*_*aij 26

什么正义说.有些人强烈建议使用SSL浏览所有内容.现在窥探非SSL会话是微不足道的,因此您应该尽量避开想要使用它的人.

然而.

使用before_filter完成它应该相当容易:

class ApplicationController < ActionController::Base
  before_filter do
    if request.ssl? && Rails.env.production?
      redirect_to :protocol => 'http://', :status => :moved_permanently
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 这应该是`request.ssl?`而不是`request.ssl`,它不存在. (5认同)

Rob*_*son 4

Force SSL 的代码非常容易阅读。

https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/force_ssl.rb

它似乎没有做相反的事情并强制使用http。它提供了 only 和 except 选项来控制哪些操作和控制器需要 SSL,但没有提供强制使用 HTTP 而不是 https 的方法。