フィルタは、アクションの前後で処理する仕組みだね!
before_filter :start_logger
…中略…
private
def start_logger
logger.debug('[Start] ' + Time.now.to_s)
end
Started GET "/ctrl/session_show" for 127.0.0.1 at 2012-01-15 08:21:45 +0900 Processing by CtrlController#session_show as HTML [Start] 2012-01-15 08:21:45 +0900 Rendered ctrl/session_show.html.erb within layouts/application (0.0ms) Completed 200 OK in 47ms (Views: 46.9ms | ActiveRecord: 0.0ms)
around_filter :around_logger
…中略…
private
def around_logger
logger.debug('[Aroud Log Start] ' + Time.now.to_s)
yield #ここでアクションを実行ね!
logger.debug('[Aroud Log End] ' + Time.now.to_s)
end
Started GET "/ctrl/session_show" for 127.0.0.1 at 2012-01-15 08:38:34 +0900 Processing by CtrlController#session_show as HTML [Aroud Log Start] 2012-01-15 08:38:34 +0900 Rendered ctrl/session_show.html.erb within layouts/application (0.0ms) [Aroud Log End] 2012-01-15 08:38:35 +0900 Completed 200 OK in 31ms (Views: 31.2ms | ActiveRecord: 0.0ms)
before → around(アクション) →after
before_filter :start_logger, :only => [ 'session_show','session_regist' ] after_filter :end_logger, :except => 'session_show'
before_filter :auth, :only => 'session_show'
…中略…
private
def auth
name = 'abc'
password = 'cdf'
authenticate_or_request_with_http_basic('Railbook') do |n,p|
name == n && password == p
end
end
def auth2
members = {'abc' => 'cdf' }
authenticate_or_request_with_http_digest('Railbook') do |name|
members[name]
end
end
before_filter :check_logined, :only => 'index'
…中略…
def index
render :text => 'ユーザ=[' + @usr + ']で、indexが表示できたよ!'
end
private
def check_logined
members = {'abc' => 'cdf' } # 当然ほんとは、Digest::SHA1.hexdigestとかで暗号化は必須ね!
if session[:usr] && members[session[:usr]] # セッションがあって、かつmembersにデータがあれば、OK
@usr = session[:usr]
else
reset_session unless members[session[:usr]] # membersに見つからないなら、セッションをリセット
flash[:referer] = request.fullpath # ログインページから元々のURLへのリダイレクト用にフラッシュで渡す
redirect_to :controller => 'login', :action => 'index'
end
end
<p style="color: Red"><%= @error %></p>
<%= form_tag :action => 'auth' do %>
<div class="field">
<label>ユーザ名:<%= text_field_tag(:username) %></label>
</div>
<div class="field">
<label>パスワード:<%= password_field_tag(:password) %></label>
</div>
<%= hidden_field_tag :referer, flash[:referer] %>
<%= submit_tag 'ログイン' %>
<% end %>
class LoginController < ApplicationController
def auth
members = {'abc' => 'cdf' } # 当然ほんとは、Digest::SHA1.hexdigestとかで暗号化は必須ね!
if members[params[:username]] && params[:password] == members[params[:username]]
session[:usr] = params[:username]
redirect_to params[:referer]
else
flash.now[:referer] = params[:referer] # NG時のログインページ用に、遷移先をflash.nowで再設定
@error = 'ユーザ名/パスワードが間違ってる!!'
render 'index'
end
end
end
def index render :text => 'ユーザ=[' + @usr + ']で、indexが表示できたよ!<br>ログアウトは<a href="/ctrl/logout">こちら</a>' end def logout reset_session redirect_to '/' end