我建立了一个博客,我希望得到最低限度的安全保护(即,我只是想让随机的人不知道,我不想尝试实施类似NSA的安全措施)。我正在使用toto与Rack :: Auth :: Basic来“保护”该网站。我想通过index.xml
让博客读者能够在不处理密码的情况下阅读提要(是的,我知道这是我的“安全”中的一个大漏洞)。
如何使用Rack :: Auth :: Basic?
通过这个网址这就是我将基本身份验证添加到我的网站的方式:
use Rack::Auth::Basic, "blog" do |username, password|
[username, password] == ['generic', 'stupidanddumbpassword']
end
答案 0 :(得分:16)
一些好的ol'老式的继承? Rack :: Auth :: Basic是一个简单的机架应用程序(来源:https://github.com/rack/rack/blob/master/lib/rack/auth/basic.rb),因此当请求路径匹配' / index时,可以覆盖#call方法并跳过身份验证。 XML':
class BlogAuth < Rack::Auth::Basic
def call(env)
request = Rack::Request.new(env)
case request.path
when '/index.xml'
@app.call(env) # skip auth
else
super # perform auth
end
end
end
use BlogAuth, "blog" do |username, password|
[username, password] == ['generic', 'stupidanddumbpassword']
end
有关机架的更多背景信息,请查看:http://rack.rubyforge.org/doc/SPEC.html
我还没有尝试@Iain关于Rack :: URLMap的建议,但看起来它也是一个不错的选择。
答案 1 :(得分:5)
谢谢你的回答!
我也使用过这个解决方案,但做了一个小改动。 因为如果应用程序需要多个可访问的路径,当前的解决方案可能会导致代码重复, 我将代码更改为:
class AppBasicAuth < Rack::Auth::Basic
def call(env)
request = Rack::Request.new(env)
allowed_paths = ['/api/v2/get_new.json']
if allowed_paths.include? request.path
@app.call(env) # skip auth
else
super # perform auth
end
end
end