とりあえずnull

プログラミングの勉強日記

ログイン後にマイページに飛ばす:Rails devise

こんな処理を行ないたい人にオススメ

・ログイン後に各ユーザーのマイページに飛ばしたい

deviseを設置してログイン機能をつけたのはいいものの、ログイン後に「ここにリダイレクトしてほしい!」っていう場合があります。というか、ウェブアプリを作る場合だとほとんどそんな感じだと思います。

 

ってことで調べてみたらやはりそこで詰まっている人が多いのでしょう。ネットにたくさんのナレッジが貯まっていました。それを整理しつつ、各マイページに飛ばす方法までまとめていこうと思います。

 

1:ログイン後の遷移先を指定する

ページを読み込む際に必ず処理されるのがapplication_controllerですよね。そこにdeviseの遷移条件処理を書いちゃえばログイン後に飛んでほしいページへジャンプすることができます。処理も簡単でメソッドを書くだけでOKです。

class ApplicationController < ActionController::Base

  protect_from_forgery

 

  def after_sign_out_path_for resource

    root_path

  end 

 

  def after_sign_in_path_for(resource) 

    mypage_path

  end

end

 

def after_sign_out_path_for resourceがログアウト時に実行されるメソッドで、その中に飛んでほしいページを書きます。この場合ルートに飛ぶことになります。

下のdef after_sign_in_path_for(resource)がログイン時に実行されるメソッドで、同様にログイン時に飛んでほしいページを指定します。この場合、mypage_pathとなっております。

 

2:各人のマイページに飛ばすにはどうすればいいか?

def after_sign_in_path_for(resource)〜endでログイン後の遷移先は指定できましたが、mypage_pathのように単一のページだとそのページにしか飛べません。つまり、各ユーザーが固有のページを持つ場合(hoge.com/mypage/1であったり、hoge.com/mypage/2のようにmypageであるがidが振られている場合)はちょっと工夫が必要になってきます。まぁそれも簡単で以下のようにしちゃえばちゃんと遷移してくれます。

  def after_sign_in_path_for(resource) 

    mypage_url(resource)

  end

resourceがユーザー情報をまとめて持ってくれているので、mypageのURLをresourceに合わせて飛んでくれーみたいな感じのことをしてくれています。

 

これでログインするとユーザーは自分のマイページにちゃんと飛ぶことができるようになります。