47.23.2. Jednoduchý začátek

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
Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .