【问题标题】:skip/disable force_ssl for particular controller in rails跳过/禁用 rails 中特定控制器的 force_ssl
【发布时间】:2015-07-15 05:13:27
【问题描述】:

我需要在我的应用程序中的所有路由上强制 SSL,message#new 控制器除外。

config/environments/production.rb,我有:

config.force_ssl = true

现在所有路由都重定向到 https,现在我想为 message#new 控制器禁用它。

有谁知道如何在 Rails 4+ 应用程序中为特定控制器禁用强制 SSL?

【问题讨论】:

  • 为什么你需要为除一个之外的每个路由禁用 SSL?考虑到它makes use of HSTS,能够选择性地允许一条路由进行不安全通信的可能性是slim
  • 在那个控制器中我从第三方 url 得到响应,它没有收到,所以我只想为那个特定的控制器禁用 ssl
  • 为什么不调查第三方 URL 损坏的原因?您是否收到特定的错误代码?
  • 您有没有为此找到解决方案?我发现的最接近的是stackoverflow.com/questions/14700182/…stackoverflow.com/questions/15962221/…,它们都是相反的非 DRY 方式

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


【解决方案1】:

根据documentation,以下应该可以工作(但仅适用于 rails > 5 版本):

config.ssl_options = {
  redirect: {
    exclude: -> request { request.path =~ /healthcheck/ }
  }
}

【讨论】:

  • 我已经尝试过了,但实际上从来没有能够让它工作。你真的试过这个吗?
  • @Lorenz 是的,我已经尝试过了,它奏效了。如果由于某种原因它不起作用(rails 版本
  • 是的,我试图让它排除特定的子域,但它不起作用。运行轨道 5.1。这是行: config.ssl_options = { redirect: { exclude: -> (request) { return true if ((request.subdomain =~ /mail|link|blog|slab/) != nil) } } }跨度>
【解决方案2】:
skip_before_action :verify_authenticity_token
force_ssl except: [:index,:create]

它对我有用。

【讨论】:

  • 弃用警告:控制器级 force_ssl 已弃用,将从 Rails 6.1 中删除。请在您的环境配置中启用 config.force_ssl 以启用 ActionDispatch::SSL 中间件,以更全面地强制您的应用程序通过 HTTPS 进行通信。如果需要,您可以使用config.ssl_options 来免除匹配的端点被重定向到 HTTPS。
【解决方案3】:

MessagesController.rb 中执行此操作-

  force_ssl except: [:new]

【讨论】:

  • 这是行不通的,因为config.force_ssl 在中间件级别上工作,所以 HTTP 请求永远不会到达控制器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
相关资源
最近更新 更多