概要
セッション機能を使って、悪性制御を行う。
サインインしていない状態で登録ユーザー用のページ(今回はトップページ)にアクセスした場合、これを表示せずにサインインページにリダイレクトする。
また、サインイン状態でルートにアクセスした場合はトップページを表示する。
セッション中確認機能の追加
以下のメソッドをUserHelpaerモジュールに追加する。
user_in_session?- アクセスしたユーザーがサインイン中かどうか(そのユーザーのセッションが存在するか)判定するメソッド。
authorize- ユーザーがサインイン状態でなければサインインページにリダイレクトするメソッド。コントローラーのフィルターでコールバックとして登録するのに用いる。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
module UsersHelper ..... def user_in_session? user_in_session.present? end ..... def authorize redirect_to :sign_in unless user_in_session? end end |
アクション実行前の認証
UserHelperで定義したauthorizeメソッドを、トップページを含むpageコントローラーのフィルターで設定する。
|
1 2 3 4 5 6 |
class PagesController < ApplicationController before_action :authorize def top end end |
ここではpageコントローラーのフィルターとして設定し、コントローラーにはtopアクションが含まれている。
アクセスしたユーザーがサインイン状態であればtopビューがレンダリングされ、サインインしていなければauthorizeの内容に従ってsign_inページに遷移する。
たとえばアクションによって振り分けたい場合はフィルターのonlyやexceptで対象となるアクションを制御する。