2011-09-28 35 views
1

我想要混合https/http站点。Rails 3,从https重定向到https,覆盖_path帮手

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

宝石,如:

  • 机架SSL
  • 机架SSL的实施者

作品完美,但只有当你想在HTTPS拥有整个网站 “混合HTTP/HTTPS”在A,B,C行动中只有ssl,而在D,E,F只有http - 不工作。

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

Rails 3 SSL routing redirects from https to http

几乎工作。 它很容易编写脚本,将(从整个视图)辅助器从“_path”更改为“_url”。

但与像链接一个问题:基于“改写”的脚本将不与工作

<%= link_to "model", some_model %> 
<%= link_to "edit model", edit_mode_url(model) %> 
... 

有许多不同势模型,我经常使用的“模式”,在迭代块,这样的解决方案。

问题:

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

或者也许有另一种解决方案,我还没有找到?

编辑:

我使用Rails 3.0.9的工作。

回答

0

使用这种宝石:

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

1

如果您想为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] 
相关问题