Rails 3 SSL弃用

我正在升级应用程序到Rails 3.0.0,我想知道是否添加SSL的标准方法已经改变了(我隐约记得,演示表明路由器现在可以处理SSL,但我不确定是否只是为了演示目的)。 我目前使用“ssl_requirement”gem,但它给:

弃权警告:不推荐使用#request_uri。 改为使用完整path。 (从/Library/Ruby/Gems/1.8/gems/ssl_requirement-0.1.0/lib/ssl_requirement.rb:53的ensure_proper_protocol调用)

另外,它在处理新的“数据方法”属性时似乎中断了。 例如:

<%= link_to "Logout", user_path, :method => :delete %> 

从应用程序的SSL部分访问时工作正常,但在从非SSL部分跟随时失败(尝试呈现show动作)(用户控制器中的所有操作都需要SSL,尽pipe我知道destroy操作不会传输安全数据)。

在Rails 3中确实很简单。在config/routes.rb

 MyApplication::Application.routes.draw do resources :sessions, :constraints => { :protocol => "https" } end 

或者,如果您需要为多个路线强制SSL:

 MyApplication::Application.routes.draw do scope :constraints => { :protocol => "https" } do # All your SSL routes. end end 

链接到SSL路由可以这样做:

 <%= link_to "Logout", sessions_url(:protocol => 'https'), :method => :delete %> 

如果你希望自动将一些控制器(或者实际上是一些子path)redirect到一个等效的基于https的URL,你可以在你的路由中添加这样的内容(我希望这个部分更简单):

 # Redirect /foos and anything starting with /foos/ to https. match "foos(/*path)", :to => redirect { |_, request| "https://" + request.host_with_port + request.fullpath } 

花了一个下午寻找最好的解决scheme后,我解决了这篇文章中描述的方法: http : //clearcove.ca/blog/2010/11/how-to-secure-a-rails-app-on-heroku-with -ssl-firesheep /引用了这篇文章: 在Rails 2应用程序中使用ssl_requirement强制使用SSL

基本上这样做:

 # lib/middleware/force_ssl.rb class ForceSSL def initialize(app) @app = app end def call(env) if env['HTTPS'] == 'on' || env['HTTP_X_FORWARDED_PROTO'] == 'https' @app.call(env) else req = Rack::Request.new(env) [301, { "Location" => req.url.gsub(/^http:/, "https:") }, []] end end end # config/application.rb config.autoload_paths += %W( #{ config.root }/lib/middleware ) # config/environments/production.rb config.middleware.use "ForceSSL" 

托普皮克老了,但只是谷歌search的人:

in * app / controller / your_controller.rb *

  class LostPasswordsController < ApplicationController force_ssl def index #.... end end 

如果全局使用它在应用程序控制器

http://apidock.com/rails/ActionController/ForceSSL/ClassMethods/force_ssl

针对小费的thx SL

在以后的Rails(至less3.12+)中,可以使用以下特定于环境的:

在config / environments / production.rb(或其他环境)

 # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. config.force_ssl = true