酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

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

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

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

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


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

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

1
2
3
4
5
6
7
  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に関するカラムをテーブルに追加。

1
2
3
4
5
## 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を追加。

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

メールの送付元を変更

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

1
config.mailer_sender = 'noreply@example.com'

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

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

1
2
3
4
5
6
7
8
9
10
11
12
 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を各自のリダイレクト先に変更。

1
2
3
4
5
6
7
8
9
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の設定を変更。

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

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

変更来歴

(07-04 08:55) 新規作成
(07-05 08:35) 記述修正

おすすめの書籍