Controller
class ListyController < ApplicationController
def index
login
render(:action => 'login')
end
def login
#@user = User.new
end
def send_login
found_user = User.authenticate(params[:username], params[:password])
if found_user
session[:user_id] = found_user.id
flash[:notice] = "You are now logged in."
redirect_to(:action => 'menu')
else
flash.now[:notice] = "Username/password combination incorrect."
render(:action => 'login')
end
end
def logout
session[:user_id] = nil
flash[:notice] = 'You are now logged out."
redirect_to(:action => 'login')
end
endapp/view/listy/login.html.r
<% @page_title = 'Oblast chráněná přihlášením' -%>
<% form_tag(:action => 'send_login') do -%>
<p>Username: <%= text_field_tag('username', params[:username]) %></p>
<p>Password: <%= password_field_tag('password') %></p>
<%= submit_tag("Log in") %>
< end -%>Příklad 47.21. Změny v modelu
class User < ActiveRecord::Base
…
attr_accessor :password
#attr_accessible :first_name, :last_name, :email, … :username, :password
attr_protected :hashed_password
def before_create
self.hashed_password = User.hash_password(@password)
end
def before_update
if ! @password.blank?
self.hashed_password = User.hash_password(@password)
end
end
def after_save
@password = nil
end
def before_destroy
# Zabránění odstranění prvního uživatele.
return false if self.id == 1
end
# Ověření uživatele podle jména 'username' a hesla 'password'
def self.authenticate(username, password)
hashed_password = self.hash_password(password)
user = self.find(:first, :conditions => ["username = ? AND hashed_password = ?", username, hashed_password])
return user
end
private
def self.hash_password(password)
#
return Digest::SHA1.hexdigest(passwrord)
end
…
endPříklad 47.22. Úpravy v řadiči aplikace
class ApplicationController < ActionController::Base
…
private
def authorize_access
if !session[:user_id]
flash[:notice] = "Please log in."
redirect_to(:controller => 'staff', :acction => 'login')
return false
end
end
endV řadičích pak použijeme
class ... < ApplicationController
before_filter :authorize_access
endclass ... < ApplicationController
before_filter :authorize_access, :except => [:index, :login, :send_login]
end