Ssl 我应该如何让所有Desive路径使用https?

Ssl 我应该如何让所有Desive路径使用https?,ssl,ruby-on-rails-3.1,devise,Ssl,Ruby On Rails 3.1,Devise,相关:(不幸的是没有工作) 重复,但答案不适用于我: 我有一个web应用程序,它已经正常工作了一段时间,但我需要将SSL添加到登录/编辑帐户路径。我正在使用Desive进行身份验证。我在Desive wiki中找到了一个条目,它让这个过程看起来非常简单,但如果我能让它工作,那就太糟糕了。简单的部分是: #in config/environments/production.rb config.to_prepare { Devise::SessionsController.force_ssl } c

相关:(不幸的是没有工作)

重复,但答案不适用于我:

我有一个web应用程序,它已经正常工作了一段时间,但我需要将SSL添加到登录/编辑帐户路径。我正在使用Desive进行身份验证。我在Desive wiki中找到了一个条目,它让这个过程看起来非常简单,但如果我能让它工作,那就太糟糕了。简单的部分是:

#in config/environments/production.rb
config.to_prepare { Devise::SessionsController.force_ssl }
config.to_prepare { Devise::RegistrationsController.force_ssl }
然后在这个要点中有大约25行代码:

我得到了足够好的工作,但每当我退出时,我会从会话删除操作中获得301,该操作会将我发送到get

Started DELETE "/users/sign_out" for 98.246.164.160 at 2012-03-02 01:45:42 +0000
[02 Mar 01:45 10886   INFO]   Processing by Devise::SessionsController#destroy as HTML
[02 Mar 01:45 10886   INFO]   Parameters: {"authenticity_token"=>"fI4VZ4V0Go2Civo3sJz8Dv5/Wtaa90ynaYr+xxx="}
[02 Mar 01:45 10886  DEBUG] Parameters: {"_method"=>"delete", "authenticity_token"=>"fI4VZ4V0Go2Civo3sJz8Dv5/Wtaa90ynaYr+xxxx=", "action"=>"destroy", "controller"=>"devise/sessions"}
[02 Mar 01:45 10886   INFO] Redirected to https://ec2-xx-xx-106-255.us-west-2.compute.amazonaws.com/users/sign_out
[02 Mar 01:45 10886   INFO] Completed 301 Moved Permanently in 3ms

Started GET "/users/sign_out" for xx.xx.164.160 at 2012-03-02 01:45:42 +0000
[02 Mar 01:45 10886  FATAL] 
ActionController::RoutingError (No route matches [GET] "/users/sign_out"):
所以我想我需要从头开始。让任何Desive路径使用https,而我的应用程序中的其他路径使用http的最简单方法是什么?我试过(从顶部的SO帖子):


但是不行。我需要一个更好的建议

还没有答案,所以我的结论是:

  • 一旦您通过https访问站点,在用户注销之前不要通过http访问它(firesheep攻击)。上面链接的文章中有很多关于Desive的内容,其中讨论了在登录/注销页面上仅使用https。坏主意

  • 您真正需要的是:

    #in config/environments/production.rb
    config.to_prepare { Devise::SessionsController.force_ssl }
    config.to_prepare { Devise::RegistrationsController.force_ssl }
    
  • 我有一大堆的问题围绕着Devage的“签名后路径”。事实证明,
    在为
    注销路径之后,希望返回一条路径——这不是一个事件,而是询问用户应该被引导到哪里。所以我返回了
    root\u path:protocol=>'http://'
    ,这就解决了问题


  • 尝试通过添加以下内容使整个应用程序使用HTTPS:

    #in config/environments/production.rb
    config.force_ssl = true
    

    我也有同样的问题。有时我注销很好,有时我从删除操作中获得301,然后重定向到GET。对我来说,这就是问题所在。

    确保在所有Desive链接中使用https(这避免了强制ssl重定向)

    在routes.rb中(仅适用于生产环境):

    现在在应用程序中使用:

    destroy_user_session_url # use _url instead of _path so the protocol is added!
    
    现在,您的注销/注销链接(以及其他设备链接)将直接指向https。避免了从HTTP DELETE到HTTPS GET的强制ssl重写。一切正常:)

    scope defaults: (Rails.env.production? ? { protocol: 'https' } : {}) do
      devise_for :users
    end
    
    destroy_user_session_url # use _url instead of _path so the protocol is added!