特定的Rails路由密码保护

时间:2014-11-28 01:27:24

标签: ruby-on-rails-4 rack

我想要一个密码网站范围,就像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 ......这是独立的。我之前需要一个站点密码。

[修订问题]

特定路线

我想使用机密密码保护密码只保护根路径//visitors。我已经看到在Rails routes.rb文件中使用的东西之前需要密码的 lambda 条件。我目前没有找到这些信息的运气。

1 个答案:

答案 0 :(得分:5)

我的网站已将未经身份验证的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!的控制器都会重定向到机架密码页面。身份验证后,我们很高兴。没有过滤器的任何东西都允许按计划进行外部访问^ _ ^