在Rails 5中为特定的控制器禁用force_ssl

时间:2018-07-23 14:43:12

标签: ruby-on-rails ruby-on-rails-5

我在我的production.rb中添加了 force_ssl

  config.force_ssl = true

但是现在我想为某些控制器禁用SSL。我试图添加到我的控制器中:

before_action :force_no_ssl

但是它给了我一个

PagesController:0x4a29560的未定义方法“ force_no_ssl”

有办法吗?

2 个答案:

答案 0 :(得分:1)

您正在使用全局配置方法。这样可以确保每个控制器和每个动作都使用ssl。切换到基于控制器的强制。

您可以将其添加到所需的每个控制器中,也可以将其添加到应用程序控制器中,然后根据控制器/操作组合将其关闭,我喜欢使用case语句,因为它允许多个选项,但是您可以什么最适合您的应用。

class ApplicationController < ActionController::Base
  force_ssl unless: :no_ssl?

  def no_ssl?
    case "#{params[:controller]} #{params[:action]}"
    when "parents index"
      return false
    else
      return false
    end
  end
end

答案 1 :(得分:0)

我的解决方案与 trh 发布的内容类似:

def force_no_ssl
  if request.ssl? && is_production?
    redirect_to :protocol => 'http://', :status => :moved_permanently
  end
end

然后在其中添加到所有应该使用 http 的控制器:

before_action :force_no_ssl