【Rails】Deviseを使用したユーザー登録認証メールの設定

Deviseのインストールやログイン周りの設定は既に完了している前提。

ユーザー登録時に、登録したメールに認証用のリンクを送信し、本当にメールが合致するかどうかの認証を作ってみます。

user.rbに追記

devise :database_authenticatable, :registerable,
       :recoverable, :rememberable, :validatable, :omniauthable, :confirmable

:confirmableを追記する。

カラムの追加

confirmation_token、confirmed_at、confirmation_sent_at、unconfirmed_email

の4つがusersカラムにない場合は追加する。

$ rails g migration add_confirmation_token_to_users confirmation_token:string
$ rails g migration add_confirmed_at_to_users confirmed_at:datetime
$ rails g migration add_confirmation_sent_at_to_users confirmation_sent_at:datetime
$ rails g migration add_unconfirmed_email_to_users unconfirmed_email:string

メールの設定

メールを送信するにはSMTPサーバーを設定しなければいけないので、とりあえずGmailを使って作ってみる。

認証用のメールはここで設定したGmailから送られてくることになります。

config/initializers/devise.rb

config.mailer_sender = "Gmailのアドレス"

config/environments/development.rb

config.action_mailer.default_url_options = {  host: 'localhost', port: 3000 }

  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address => "smtp.gmail.com",
    :port => 587,
    :user_name => "Gmailアドレス",
    :password => "Gmailパスワード",
    :authentication => :plain,
    :enable_starttls_auto => true
  }

Githubに上げるときは公開されてしまうので環境変数などで対処する。

サーバーを再起動します。

Gmailの設定

安全性の低いアプリケーションのアクセス という設定はオフにする必要がある。

https://support.google.com/accounts/answer/6010255

それと二段階認証が有効になっていると解除する必要があるみたいです。

参考

https://qiita.com/cigalecigales/items/73d7bd7ec59a001ccd74

https://qiita.com/shizuma/items/c8c2e71af8c1dcf3d1c2