Sinatra:如何使用ONLY密码保护整个站点,而不是基本的HTTP身份验证?

时间:2014-11-12 20:54:56

标签: authentication sinatra

我有一个Sinatra应用程序,我想在一个非常基本的级别密码保护。基本的想法是,将有一个页面,其中有一个输入框,您可以在其中输入密码。如果提交了正确的密码,那么您可以访问该网站的其余部分。如果您尝试在没有密码的情况下访问该站点,则应将您重定向到密码页面。

我可以使用基本的HTTP身份验证:

use Rack::Auth::Basic do |username, password|
  password == 'password'
end

但我希望只为密码设置一个像样的页面,而不是使用HTTP身份验证。

有没有宝石/方法可以轻松完成这项工作?

1 个答案:

答案 0 :(得分:2)

实现这样的事情相当简单。但是因为我在开始时遇到了同样的问题,所以我会帮助你。

use Rack::Session::Pool 

helpers do
    def loged? ; session["isLogdIn"] == true; end
    def protected! ; halt 401 unless admin? ; end
end

get "/login/?" do
    erb :login
end

post '/login/?' do
    if params['password'] == "mypassword"
        session["isLogdIn"] = true
        redirect '/'
    else
        halt 401
    end
end

get('/logout/?'){ session["isLogdIn"] = false ; redirect '/' }

get 'myprotectedpage' do
    protected!
    erb :view
end

当然你可以扩展这个哈希密码等等。

执行此类操作的宝石是https://github.com/hassox/warden,但我从未使用它。