セッションは、sessionというローカル変数を使用する。
ハッシュなので、session[:key]、session[:key]=...という形式
消すときはsession.delete(:key)
ログイン機能など
before_filter :メソッド名, :except => [ログイン無しで使用できるメソッドの配列]
を記述。
ログイン認証成功時に、セッションにデータを書き込む。
上で書いたフィルタメソッドで
ローカル変数 = session[キー]
if ローカル変数
return ローカル変数
else
redirect_to ログインページURL
end
等のように書く。
これによって、認証が必要な処理へ未認証状態で飛んだ場合にログインページが表示される。
ログインページからの認証終了時に元の処理に戻るには他の手法が必要
フィルタからログインページへ情報を渡す必要がある場合は方法を考えないといけない。
ローカル変数には、認証成功時にセッションに書いたデータが取得できるので、
必要に応じて処理を行えばいい。
あと、たくさんのコントローラーでログイン処理を共通で行うのであれば、
フィルタをクラス化する方が良いかもしれない。
クラスを使う場合は
around_filter フィルタインスタンス, :except => [ログイン無しで使用できるメソッドの配列]
フィルタはbefore、afterと2つのメソッドを作成する。
コントローラが渡されるので、そのための仮引数を用意。
beforeはコントローラ動作開始前、afterは動作完了後。
ログアウト時に、セッションの情報を消すなど。
ページ表示時にはログイン情報があることをこの機能で保証して、
レイアウト上にログイン情報を表示するとか。
PR