Когда пользователь меняет свой адрес электронной почты, новый адрес электронной почты не подтверждается. Однако devise не обновляет / сбрасывает поле Verified_at.
Я пробовал:
before_update :updateEmailConfirmed, if: :email_changed?
def updateEmailConfirmed
# check if there is an unconfirmed_email
user = User.find(id)
if !user.unconfirmed_email.nil?
# set confirmed_at to nil
self.update!(confirmed_at:nil)
end
end
Я понимаю, что поле :confirmed_at
предназначено для любого подтверждения, поэтому оно работает, как и ожидалось. Однако я использую это поле для отслеживания, чтобы убедиться, что электронная почта была подтверждена.
В настоящее время я добавил дополнительное поле в мою модель пользователя с именем :email_confirmed
типа bool , и я установил в true / false, в зависимости от того, было ли проверено текущее поле :email
.
Мой вопрос: есть ли что-то встроенное в модули Devise, которое позволит мне делать это, не вводя новые столбцы в мой Таблица пользователей и изменение моего класса User.
Update1.)
Вот теги, установленные для моей модели User:
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:confirmable
protected
def confirmation_required?
false
end
end
Так выглядит моя таблица User. :
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.string "confirmation_token"
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.string "unconfirmed_email"
t.boolean "verified", default: false
t.index ["confirmation_token"], name: "index_users_on_confirmation_token",
unique: true
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name:
"index_users_on_reset_password_token", unique: true
end