我想有混合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一起使用