仅在一个页面上显示Sinatra Basic HTTP Auth

Jam*_*son 6 ruby sinatra

知道如何在模块化的Sinatra应用程序中只在一页上显示Sinatra HTTP auth显示吗?

ch4*_*d4n 9

添加到@iain回答,因为您已经询问了HTTP Auth(我假设是基本身份验证).

class MyApp < Sinatra::Base
  def authorized?
    @auth ||=  Rack::Auth::Basic::Request.new(request.env)
    @auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == ["CUSTOM_USERNAME","SECRET_PASSWORD"]
  end

  def protected!
    unless authorized?
      response['WWW-Authenticate'] = %(Basic realm="Restricted Area")
      throw(:halt, [401, "Oops... we need your login name & password\n"])
    end
  end

  get "/protected_content" do
    protected!
    "in secure"
  end

  get "/" do
    "anyone can access"
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 好东西,+1.我还建议将`["CUSTOM_USERNAME","SECRET_PASSWORD"]`更改为`[ENV ["CUSTOM_USERNAME"],ENV ["SECRET_PASSWORD"]]`并将它们加载到服务器的环境中,以便不传递密码在代码和通过源代码控制等 (3认同)