ログイン状態を判定する
rails の定石を知らないが、ログインしてセションが有効になっているかを判定し、有効で無い場合はログイン画面を表示する方法を考えてみる。
ログイン画面では LoginController を使用し、ログインに成功すると ListController に遷移するとする。
- LoginController
class LoginController < ApplicationController def login begin user = User.find(params[:id]) if user.password == params[:password] session[:second_session_id] = session.session_id redirect_to "/list" return end rescue ActiveRecord::RecordNotFound end redirect_to :action=>"index" , :id=>params[:id],:message=>"login error" end end
- ApplicationController
class ApplicationController < ActionController::Base before_filter :check_session_id protected def check_session_id return if controller_name == "login" if !session[:second_session_id] || session[:second_session_id] != session.session_id redirect_to "/login" end end end
ログインに成功したらセションIDを別キー(:second_session_id)で保持。
before_filter で 現在のセションIDと別キーで保持しているセションIDをチェックし、異なる場合はログイン画面(LoginController)に飛ばす。
とりあえず思い通りには動いてくれてる。
今は session_id をそのまま保持しているけど、ログイン状態を保持するクラスを用意しておいて、ログインID、ログイン時刻、最終処理時刻なんかを詰め込んでおけば一定時間処理が無ければログアウトさせるとかできるよね。