deviseのログイン・ログアウト時、登録完了後のリダイレクト先変更、ユーザー登録完了時に確認メール送付 [Rails 4.1]

devise』のミニTipsを3つ紹介します。

(1) ログイン・ログアウト時のリダイレクト先の変更
(2) ユーザー登録完了後にメールアドレスの確認をする
(3) ユーザー登録完了後のリダイレクト先の変更

今までログイン機能を持たせてきたアプリケーションではたいてい設定する項目ですので、忘備録がてらのメモです。


🐯 (1) ログイン・ログアウト時のリダイレクト先の変更

app/controllers/application_controller.rbに以下を追加。admin_root_pathを自分の希望するパスに変更。

def after_sign_in_path_for(resource)
admin_root_path
end
def after_sign_out_path_for(resource)
admin_root_path
end

🐡 (2) ユーザー登録完了後にメールアドレスの確認をする

前提

Devise/cancancanを使ってログイン機能を実装する
のひととおりログイン機能ができている前提で話を進めます。

また、ここではdeviseでユーザー管理をするモデルをAdminUserとします。

MigrationファイルのConfirmableのコメントアウトを外す

db/migrate/xxxx_admin_users.rb内のConfirmableに関するカラムをテーブルに追加。

## Confirmable
t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
t.string :unconfirmed_email # Only if using reconfirmable

(僕の使っているバージョンでは上記のようになっていました)

AdminUserモデルにconfirmableを追加

app/models/admin_users.rb:confirmableを追加。

# ↓ deviseに :confirmable を追加
devise :confirmable

メールの送付元を変更

config/initializers/devise.rbの次の設定を変更。

config.mailer_sender = 'noreply@example.com'

開発環境でのメール送付設定

config/environments/development.rbに次の設定を追記。ここでは例としてGmailの設定にします。

config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.raise_delivery_errors = true
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:enable_starttls_auto => false,
:address => "smtp.gmail.com",
:port => 587,
:authentication => :plain,
:user_name => "gmailのメールアドレス",
:password => "メールのパスワード"
}

設定が完了すると、ユーザー登録が完了したらメールが送付されます!

🏈 (3) ユーザー登録完了後のリダイレクト先の変更

リダイレクト先を設定

app/controllers/registrations_controller.rbを追加して以下のように記述。
admin_user_mail_sent_message_pathを各自のリダイレクト先に変更。

class RegistrationsController < Devise::RegistrationsController
def after_sign_up_path_for(resource)
admin_user_mail_sent_message_path
end
def after_inactive_sign_up_path_for(resource)
admin_user_mail_sent_message_path
end
end

ルーティングの修正

config/routes.rbのdevise_forの設定を変更。

devise_for :users, controllers: { registrations: 'registrations' }

これで確認メール送付完了時のリダイレクト先が変わります!

🚌 変更来歴

(07-04 08:55) 新規作成

(07-05 08:35) 記述修正

📚 おすすめの書籍