Nejdříve předestřu globální pohled na toto řešení a jeho integraci do aplikace. Přihlašovací informace jsou prezentovány v tabulce, v tomto případě pojmenované people ve forme přihlašovacího jména login a SHA1 hashe hesla sha1hash. Model této tabulky Person je rozšířen o několik metod sloužících k ověření hesla daného uživatele. Dále implementujeme
FIXME: work in progress.
Začnu jednoduchým řešením s uživatli v databázi. Předpokládejme že uživatelé jsou v tabulce 'people' popsané modelem Person. Sloupec s přihlašovacím jménem se jmenuje login, a hash hesla je uložen v sloupci sha1hash.
První věcí kterou potřebujeme udělat je rozšířit model o několik metod které budeme potřebovat.
def valid_password?(password)
self.sha1hash == self.sha1_digest(password)
end def self.sha1_digest(password, salt=nil)
'{SHA}'+Base64.encode64(Digest::SHA1.digest(password)).chomp
end def self.authenticate(login, password)
user = find(:first, :conditions => ["login = ?", login])
return nil if user.nil?
return user if (Person.sha1_digest(password) == user.sha1hash)
nil
end def login
if request.post?
@user = Person.find_by_login(params[:login])
if @user and @user.login == 'radek'
session[:uid] = @user.id
redirect_to :controller => 'listy', :action => 'index'
else
@auth_error = 'Wrong username or password'
end
end
end