Rails 3,从https重定向到https,覆盖路径帮助器



我想有混合https/http网站。

此外,我想有重定向从https到http(即。用户登录成功后,它应该重定向到根页面(http)。

宝石:

  • rack-ssl
  • rack-ssl-enforcer

工作完美,但只有当你想有整个网站在https"混合http/https",在A, B, C操作中只使用ssl,在D, E, F操作中只使用http -不起作用。

我检查了另一个SO线程的解决方案:

Rails 3 SSL路由从https重定向到http

几乎是有效的。很容易编写脚本,将(在整个视图中)helper从"_path"更改为"_url"。

但是像

这样的链接有一个问题:
<%= link_to "model", some_model %>
<%= link_to "edit model", edit_mode_url(model) %>
...

有许多不同的模型,我经常在迭代块中使用"模型",所以基于"重写"脚本的解决方案不适用于此。

问题:

是否有办法改变<%= link_to 'model', model %>代码的行为来解决这个问题?是否有可能覆盖路径助手(标准协议将是http,对给予参数- https)?

或者可能有另一个我还没有找到的解决方案?

编辑:

如果您想为特定路由添加https

你可以使用下面的代码

before_filter :redirect_to_https
def redirect_to_https
     redirect_to :protocol => "https://" unless (request.ssl? || request.local?)
end

你可以定义你想要使用before_filter动作的路由,只需执行以下命令

before_filter :redirect_to_https, :except => [:action1 , :action2]
before_filter :redirect_to_https, :only => [:action1 , :action2]

使用这个gem:

https://github.com/retr0h/ssl_requirement

gem install ssl_requirement

然后加入ssl_required :new, :destroy #others actions给你的控制器。

如果你使用设计,你必须覆盖每个控制器并指定所有动作

devise_for :users, :controllers => { :confirmations => "confirmations", :omniauth_callbacks => "omniauth_callbacks", :passwords => "passwords",  :registrations => "registrations", :sessions => "sessions", :unlocks => "unlocks" } do
# etc
end

与Rails 3.0.x一起使用

最新更新