【问题标题】:Specific Rails routes password protected特定的 Rails 路线受密码保护
【发布时间】:2015-01-26 15:30:53
【问题描述】:

我想要一个站点范围的密码,就像 Rack 的 Basic AUTH 一样

/config.ru

use Rack::Auth::Basic, "Restricted Area" do |username, password|
  [username, password] == ['admin', 'admin']
end

run Rails.application

我不希望它阻止路径 /API/mailgun/incoming_email 使用密码访问。我可以在 Rack 中完成这个吗?或者我应该在 routes.rb 中实现一个几乎所有资源都在 Rack(输入一次)密码后面的范围?

为了记录,我在网站内使用 Devise……这是分开的。我需要一个全站密码。

[修改问题]

具体路线

我想使用 Rack 之类的密码仅对根路径 //visitors 进行密码保护。我之前在 Rails routes.rb 文件中看到过一些需要密码的 lambda 条件。目前我没有运气找到这些信息。

【问题讨论】:

    标签: ruby-on-rails-4 rack


    【解决方案1】:

    我的网站已经将未经身份验证的 Devise 用户重定向到 /users/sign_in。所以我只需要密码保护//users/sign_in/users/sign_up。我就是这样做的。

    config.ru

    class RootSiteAuth < Rack::Auth::Basic
      def call(env)
        request = Rack::Request.new(env)
        if ['/', '/users/sign_in', '/users/sign_up'].include? request.path
          super
        else
          @app.call(env)
        end
      end
    end
    
    use RootSiteAuth, "Restricted Area" do |username, password|
      [username, password] == ['admin', 'admin']
    end
    
    run Rails.application
    

    而且它有效。每个具有before_filter :authenticate_user! 的控制器都会重定向到机架密码页面。认证后我们就可以开始了。没有过滤器的任何东西都允许按计划进行外部访问。 ^_^

    【讨论】:

    • 太棒了!这也适用于 Jekyll-Rack 应用程序。我刚刚实现了这个确切的代码块,将run Rails.application 替换为run Rack::Jekyll.new
    • 已经6年了,这仍然是最好的方式还是可以用另一种更好的方式来完成? (顺便说一句,代码在 Rails 4 中仍然有效)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2020-01-28
    • 2020-11-24
    • 2011-07-31
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    相关资源
    最近更新 更多