今回はDeviseでフレンドリーフォロワーリングの実装につまったのでポイントをメモとして残します。
MEMO
現状ログインしていないユーザーがDeviseのauthenticate_userメソッドによって、アクセス制限に引っかかり、ログインページにリダイレクトされる。 また、ログイン後も引っかかったページではないページに誘導されてしまう。 今回はログイン後は前にアクセスしたページに誘導する処理を実装する。
# friendly following class ApplicationController < ActionController::Base before_action :store_location ・ ・ def store_location if request.path != new_user_session_path session[:previous_url] = request.fullpath end end def after_sign_in_path_for(resource) if !session[:previous_url].nil? session[:previous_url] else current_user end end
メソッドの説明
- store_locationメソッド: pathを記憶するメソッド
- after_sign_in_path_for メソッド: ログインした後のURLを指定するメソッド
コードについて
store_locationメソッドをコールバックとして設定し、毎回リクエストのあったパスをセッションとして保存する。 しかし、非ログインユーザーがアクセスできないページ -> ログインページの場合はログインページのpathが保存されてしまうので ログインページのリクエストは保存しない。 このセッションを上手く使うことでフレンドリーフォロワーリングを実装できる。