如何在不需要SSL时重定向非SSL流量?

时间:2013-11-04 16:09:02

标签: ruby-on-rails ssl ruby-on-rails-4

我的应用程序的一部分正在使用带有force_ssl方法的SSL,在相关控制器中执行类似的操作:

class MyController < ApplicationController
  force_ssl
end

但是,这不适用于不属于本节的页面,我不想使用SSL。是否可以在不需要时重定向回非SSL协议?

2 个答案:

答案 0 :(得分:1)

为什么不在HTTP级别进行ssl重定向?在HTTP级别执行此操作更干净,更快(因为请求在Rails之前重定向)。

如果您看到force_ssl源代码(http://apidock.com/rails/ActionController/ForceSSL/ClassMethods/force_ssl),则只需进行简单的重定向。

您可能也不想使用link_to的协议选项。

答案 1 :(得分:0)

我不认为这有一些自动功能。所以你必须有一些需要SSL的地方,哪些不需要。当你进行映射时,在ApplicationController中创建简单条件是微不足道的。

像这样,如果你不介意语法

https_only = { auth:{'login','logout',...}, registration:{'new','edit',...},...}

https_only.each do |controller, actions|
    if controller_name == controller
        actions.each do |a|
            if action_name == a
                do_redirect_to_https_with_current_path
            else
                do_nothing
        end
    end
end