class ApplicationController < Sinatra::Base # Configure Warden for authentication enable :sessions Warden::Manager.before_failure {|env,opts| env['REQUEST_METHOD'] = 'POST'} Warden::Strategies.add(:password) do def valid? params['user'] && params['user']['username'] && params['user']['password'] end def authenticate! unless (user = User.find_by_username params['user']['username']) fail! 'The username you entered does not exist' else user.authenticate(params['user']['password']) ? success!(user) : fail!('Could not log in') end end end helpers do def current_user env['warden'].user end def authenticated? !!current_user end def authenticate env['warden'].authenticate! end alias_method :logged_in?, :authenticated? end end