Ruby on rails Heroku Rails强制SSL重定向循环
所以我有一个Rails应用程序,它在Heroku上有一个暂存环境和一个生产环境。我想在生产环境上强制使用ssl,但不想在登台上强制使用ssl。我的应用程序控制器(下面)显示了我是如何配置的,但是我的登台环境仍然试图强制ssl工作,这导致了重定向循环 我的问题是:A)如何停止重定向循环并使应用程序不因强制ssl而崩溃?以及B)我必须做些什么才能阻止强制ssl在我尚未完成的登台环境中发生 谢谢Ruby on rails Heroku Rails强制SSL重定向循环,ruby-on-rails,ruby,ssl,heroku,ruby-on-rails-4,Ruby On Rails,Ruby,Ssl,Heroku,Ruby On Rails 4,所以我有一个Rails应用程序,它在Heroku上有一个暂存环境和一个生产环境。我想在生产环境上强制使用ssl,但不想在登台上强制使用ssl。我的应用程序控制器(下面)显示了我是如何配置的,但是我的登台环境仍然试图强制ssl工作,这导致了重定向循环 我的问题是:A)如何停止重定向循环并使应用程序不因强制ssl而崩溃?以及B)我必须做些什么才能阻止强制ssl在我尚未完成的登台环境中发生 谢谢 class ApplicationController < ActionController::Ba
class ApplicationController < ActionController::Base
force_ssl if: :ssl_configured?
before_action :configure_permitted_parameters, if: :devise_controller?
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
# Make application helpers availble within controllers
include ApplicationHelper
# enable_authorization :unless => :devise_controller? # ACl
before_filter do # ACL work around for attribute mass assignment
resource = controller_path.singularize.gsub('/', '_').to_sym
method = "#{resource}_params"
params[resource] &&= send(method) if respond_to?(method, true)
end
rescue_from CanCan::Unauthorized do |exception|
redirect_to main_app.root_path, :alert => exception.message
end
#handling redirection after login basing on the just logged in user role
def after_sign_in_path_for(user)
if user.has_role?(:director)
unless user.organization.nil?
dashboard_organization_path(user.organization.id)
else
organization_trainings_url
end
elsif user.has_role?(:user)
user_path(user)
elsif user.has_role?(:admin)
organization_trainings_url
else
root_url
end
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << [:first_name, :last_name, :title, :phone, :email,
:organization_id, :badge, :dl,
:hire_date, :dl_expiration, :leader_id, :password, :current_password,
:division_id, :bureau_id]
end
private
def ssl_configured?
Rails.env.production?
end
end
class ApplicationController:设计_控制器?#国际计算语言学协会
在使用过滤器之前,请先使用ACL解决属性质量分配问题
resource=controller_path.singularize.gsub(“/”,“"”)to_sym
method=“#{resource}_参数”
参数[resource]&&=send(method)if respond_to?(method,true)
结束
从CanCan营救|u::未经授权的do |异常|
将_重定向到主_app.root_路径:alert=>exception.message
结束
#根据刚刚登录的用户角色处理登录后的重定向
为(用户)在路径中签名后定义
如果user.has_角色?(:director)
除非user.organization.nil?
仪表板\组织\路径(user.organization.id)
其他的
组织机构\u培训\u网址
结束
elsif user.has_角色?(:user)
用户路径(用户)
elsif用户。是否具有_角色?(:admin)
组织机构\u培训\u网址
其他的
根地址
结束
结束
受保护的
def配置\u允许的\u参数
设计参数消毒剂。对于(:注册)您可以利用
例如,您可以使用
heroku config:set APP_NAME=my APP NAME
在每个Heroku服务器上,以便您可以在代码中区分它们。您可以按如下方式使用此环境/config变量:
# in production.rb
config.force_ssl = true unless ENV['APP_NAME'] == 'my-staging-app-name'
但是,IMHO,更好的方法是为您尝试执行的操作设置一个变量/标志,例如SKIP\u FORCE\u SSL.
heroku config:set SKIP\u FORCE\u SSL=true
然后,在应用程序中,您可以检查是否应使用以下内容强制SSL:
config.force\u ssl=true,除非ENV['SKIP\u force\u ssl']
我建议使用如上所述的黑名单方法,因此默认情况下,如果应用程序找不到环境变量,或者您正在使用的任何其他方法来检查,则强制使用SSL
如果在生产模式下运行时需要在开发机器上进行测试(使用production.rb
),可以在~/.bash\u配置文件中设置相同的环境变量:
export SKIP\u FORCE\u SSL='true'
(请记住,您需要打开一个新的控制台选项卡/窗口才能使其生效。还要注意的是,环境变量将作为字符串返回,而不是布尔值返回,即使您不使用这些引号。)
希望这有帮助 您是否检查了暂存
是否真的是暂存
?Rails.env.production?
在heroku控制台中返回什么?当我输入它时,得到的是false和Rails.env.staging?
?您解决了这个问题吗?我也有同样的问题,这里也是。有什么见解吗?