Devise - email更新時に確認メールを送る(reconfirmable)


必要事項(4点)

confirmableモジュールがセットされていること

/app/models/user.rb

class User < ActiveRecord::Base
  #...
  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable, :omniauthable
  #...

reconfirmableが有効になっていること

/config/initializers/devise.rb
Devise.setup do |config|
  #...
  config.reconfirmable = true
  #...

データベースにunconfirmed_emailコラムが存在すること

# == Schema Information
#
# Table name: users
#
#  id                     :integer          not null, primary key
#  email                  :string           default(""), not null
#  encrypted_password     :string           default(""), not null
#  reset_password_token   :string
#  reset_password_sent_at :datetime
#  remember_created_at    :datetime
#  sign_in_count          :integer          default(0), not null
#  current_sign_in_at     :datetime
#  last_sign_in_at        :datetime
#  current_sign_in_ip     :inet
#  last_sign_in_ip        :inet
#  created_at             :datetime
#  updated_at             :datetime
#  confirmation_token     :string
#  confirmed_at           :datetime
#  confirmation_sent_at   :datetime
#  admin                  :boolean          default(FALSE)
#  username               :string
#  provider               :string
#  uid                    :string
#  unconfirmed_email      :string
#

ユーザーに現在メール確認待ちの状態であることを知らせること

- if devise_mapping.confirmable? && resource.pending_reconfirmation?
  .alert.alert-warning
    Currently waiting confirmation for: #{resource.unconfirmed_email}

特定の状況でのみreconfirmable無効にしたい場合

#...
def update
 @user = User.find(params[:id])
 @user.skip_reconfirmation!
 if @user.update_attributes(params[:user])
  flash[:notice] = "User was successfully updated."
  redirect_to edit_admin_user_path(@user)
 else
  render :edit
 end
end
#...

資料