当url中的特定页面时,sinatra不执行身份验证

时间:2011-08-29 20:11:22

标签: ruby sinatra protected

如果我使用localhost:4567,我会收到提示输入用户名和密码的信息,但如果我使用localhost:4567 / MyStaticPage.htm,它会直接进入该页面,即没有任何身份验证(是的,我停下来重新启动sinatra,关闭并重新打开我的浏览器)。我在“获取”中添加“puts”语句以查看正在运行的内容,并且“MyStaticPage.htm”的URL似乎没有在我期望的“获取”中处理。这是代码:

require 'rubygems'
require 'sinatra'

helpers do

  def protected!
    unless authorized?
      response['WWW-Authenticate'] = %(Basic realm="Restricted Area")
      throw(:halt, [401, "Not authorized\n"])
    end
  end

  def authorized?
    @auth ||=  Rack::Auth::Basic::Request.new(request.env)
    @auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials ==     ['testuser', 'testpassword']
  end

end

get '/MyStaticPage.htm' do
  puts "this is never seen"
  protected!
  File.new('public/MyStaticPage.htm').readlines
end

get '/' do
  puts "this is seen"
  protected!
  File.new('public/MyStaticPage.htm').readlines
end

TIA

1 个答案:

答案 0 :(得分:1)

可能在您的路线之前提供静态文件。不要将这些.htm文件放到公共文件夹中,一切都会顺利运行。

菲利普