我有一个Sinatra应用程序,我想在一个非常基本的级别密码保护。基本的想法是,将有一个页面,其中有一个输入框,您可以在其中输入密码。如果提交了正确的密码,那么您可以访问该网站的其余部分。如果您尝试在没有密码的情况下访问该站点,则应将您重定向到密码页面。
我可以使用基本的HTTP身份验证:
use Rack::Auth::Basic do |username, password|
password == 'password'
end
但我希望只为密码设置一个像样的页面,而不是使用HTTP身份验证。
有没有宝石/方法可以轻松完成这项工作?
答案 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,但我从未使用它。