devise ログイン後に元のページにリダイレクトする

2013/01/20、ちゃんと公式にドキュメントがあることを発見。
How To: Redirect back to current page after sign in, sign out, sign up, update
 
私の探し方が悪かった。。

deviseでログインした後に任意の場所にリダイレクトするには、ApplicationControllerにafter_sign_in_path_forメソッドを定義して、その戻り値で任意のパスを返せばいい。

 

では、次のような要望に答えるにはどうすればいいか?

 

記事一覧画面(http://localhost:3000/posts)のような画面にいて、記事を投稿したいなと思って記事一覧画面にあるログインボタンをポチッと押してログインしたとする。

ログイン完了後は、トップ画面ではなくて記事一覧画面に戻すようにしたい。

 

同様に、個別記事画面(http://localhost:3000/posts/2)のような画面にいる場合も同様に、ログインしたら自動的に元の画面である個別記事画面に戻すようにしたい。

 

こういった場合、ログイン直前までユーザがいたページを動的に判断する仕組みが必要になる。

 
 

そこでこんな感じで実装してみた。

最後にユーザが表示していた画面を毎回セッションに記憶させておく。

そして、ログイン完了後にafter_sign_in_path_forで表示パスを返す時に、セッションに記憶しておいた情報を指定してやるという方法。

 

テストする

あとはこんな感じでIntegration Testを作成すればカンペキ。

ログアウト後に元いた画面に遷移させる

ログアウト後に元いた画面に遷移させる方法については、deviseのGitHubで紹介されていた。

Keeping user on the same page after signing out

 

ログイン版も紹介してくれればいいのに。

それとも思いつかなかったのかな?

コメントを残す

トラックバック: http://pgnote.net/wp-trackback.php?p=1627