sorceryで使えるメソッドの動き(復習)
Sorcery
のreauire_login
とnot_authenticated
がどういった流れで動いているのか曖昧だったため少し調べなおしてみた。とりあえずメモとしてババっと書いて残しておきます。間違い変更等分かり次第直します。
require_loginメソッド
【Sorcery】Sorceryで使えるようになるメソッドとその活用例 - Qiita
ログインしていないユーザーをアクション単位で弾く。
例えば、ログイン用のユーザーセッションコントローラにskip_before_action :require_login, only: %i[create new]
に記載しているのは、ログイン画面とログインするためのアクションの時はrequiere_loginが発動しないようにするため。そうしないと、ログイン画面にいるのに未ログイン状態だからと無限にログイン画面にリダイレクトされるという余計なお世話状態になってしまう。無意味な処理をしないで、ホワイトリスト形式でnewとcreateアクションのみ、before_actionがスキップされるように設定している。
not_authenticatedメソッド
require_login内で実行される。
sorceryジェムのインストールによって使えるようになる。デフォルトでは、redirect_to root_pathに自動的に飛ばされるように定義されているが、フラッシュメッセージなどをカスタマイズしたい場合はapplication_controller.rbに上書きする。
redirect_back_or_toメソッド
掲示板ページにアクセスしようとしたユーザーにログインを要求する場合、require_loginメソッドでユーザーをログインページに誘導し、ログインが成功したら、最初に訪れようとしていた掲示板ページにリダイレクトさせるということが可能になる。
require_login
との連携技ということかな?
例えば掲示板一覧へのリンクをブラウザで直打ちした場合、未ログイン状態なのでapplication_controller.rbに記載されているrequier_loginメソッドによってログインが強制される。強制される仕組みはprivateメソッドとして定義されているnot_authenticatedメソッドがequier_loginメソッド内で機能するから。これにより、ログイン画面に飛ばされるが、redirect_back_or_toメソッドのおかげでログインした後は一番最初に行きたがっていた掲示板一覧ページに飛ばしてくれる。
def create @user = login(params[:email], params[:password]) if @user redirect_back_or_to root_path, success: (t'.success') else .....