Ssl 我应该如何让所有Desive路径使用https?
相关:(不幸的是没有工作) 重复,但答案不适用于我: 我有一个web应用程序,它已经正常工作了一段时间,但我需要将SSL添加到登录/编辑帐户路径。我正在使用Desive进行身份验证。我在Desive wiki中找到了一个条目,它让这个过程看起来非常简单,但如果我能让它工作,那就太糟糕了。简单的部分是: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
#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帖子):
但是不行。我需要一个更好的建议 还没有答案,所以我的结论是:
#in config/environments/production.rb
config.to_prepare { Devise::SessionsController.force_ssl }
config.to_prepare { Devise::RegistrationsController.force_ssl }
在为
注销路径之后,希望返回一条路径——这不是一个事件,而是询问用户应该被引导到哪里。所以我返回了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!