【Rails5】Devise でコントローラーをカスタマイズして、ユーザー登録後のリダイレクト先を my page にする

本記事では Devise のコントローラーをカスタマイズして、ユーザー登録後、 ログイン後のリダイレクト先を my_page に指定したいと思います。

Devise
https://github.com/plataformatec/devise

環境はこちらです

Generate

Deviseはユーザーモデルをベースとして進めていきます。コントローラーをカスタマイズしていくために、次のコマンドを実行します。
すると、app/controllers/users/ にそれぞれのコントローラーが作成されます。

Routes

devise_for でコントローラーのルーティングを、 devise_scope で my_page のルーティングを設定します。

Controllers

ユーザー登録後は registrations_controller に after_sign_up_path_for を、 ログイン後は sessions_controller に after_sign_in_path_for のメソッドをオーバーライドします。
ちなみにこれらのメソッドは app/controllers/application_controller.rb に定義した方が管理しやすいという意見もあるかと思いますが、 個人的には application_controller.rb はどんどん煩雑になってくるので、 今回はそれぞれのコントローラーに定義しています。

registrations_controller に my_page アクションを追加します。 また、 authenticate_user! メソッドは、Deviseが提供しているメソッドで、ログイン有無のチェックして、ログインしていない場合はログイン画面にリダイレクトさせます。

app/controllers/users/registrations_controller.rb

app/controllers/users/sessions_controller.rb

ちなみに、ユーザー登録にメール認証を導入してくれる confirmableモジュール を有効にしている場合は、 after_sign_up_path_for ではなく after_inactive_sign_up_path_for に指定することになります。

Views

リダイレクト先となる my_page.html.erb を作成します。ここではログアウトできるように delete_path を書いておきます。

app/views/devise/registrations/my_page.html.erb

あとはユーザーのログインの有無を確認するために、 header などに <%= current_user.email if user_signed_in? %>
などを書いておくといいですね。 current_user や、 user_signed_in? も Devise のヘルパーメソッドです。

今回は以上です。ご覧いただき、ありがとうございました!😺


投稿者:

Shuji Tenra

「仕事に特化したQ&AサイトJobQuery【ジョブクエリ】」の開発/運営をしています。https://jobquery.jp