deviseでユーザー登録時にメールで認証する方法


メールによる認証を導入

ユーザー登録が成功すると無事にユーザーログインできるようになるのですが、普段使っている世の中のWebサービスのように登録したタイミングで登録完了メールが飛んできて、そのメールに記載されているリンクをクリックすると正式に登録完了するという機能を実現したいと思います。

deviseでメールによる認証を導入する

deviseでメールによる認証を導入するには、deviseに用意されている機能を使うのが良いと思います。導入もかなり簡単です。/app/models/user.rbの

/app/models/user.rb
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

という行の行末に:confirmableを追加して以下のようになります。

/app/models/user.rb
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable

上記のようにconfirmableを追加して:confirmableを読み込みます。次にメールを送信するためのSMTPサーバーの設定をしていきます。今回はGmailで送信するとしてconfig/environments/development.rbを以下のように編集します。

config/environments/development.rb
config.action_mailer.smtp_settings = {
  :enable_starttls_auto => true,
  :address => "smtp.gmail.com",
  :port => 587,
  :domain => 'smtp.gmail.com',
  :user_name => "任意のGmailアドレス",
  :password => "任意のGmailパスワード",
  :authentication => 'login',
}

以上でdeviseのメールによる認証機能が設定出来ました。一点、注意点としてGmailの設定として「安全性の低いアプリのアクセス」を許可していないとGmailから送信することは出来ないので、今回のGmailからメールを送信する機能を利用するためには設定を変更しておきましょう。

無事に設定が終わると、ユーザー登録が完了したタイミングで登録した時に使用したメールアドレスに登録完了のメールが届いてリンクをクリックすると登録完了になります。