我想要一个密码网站范围,就像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 条件。我目前没有找到这些信息的运气。
答案 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!
的控制器都会重定向到机架密码页面。身份验证后,我们很高兴。没有过滤器的任何东西都允许按计划进行外部访问^ _ ^