何かやってみるブログ

興味をもったことに関して書いています。技術系の記事が多いです。

Deviseでフレンドリーフォロワーリングを実装する

今回は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が保存されてしまうので ログインページのリクエストは保存しない。 このセッションを上手く使うことでフレンドリーフォロワーリングを実装できる。