Подтвердить что ты не робот

Как пропустить необходимость подтверждения обновления адреса электронной почты с помощью программы?

Я использую Rails 3 с новым подтверждением.

Я хочу, чтобы пользователи в целом подтвердили свой адрес электронной почты. При создании нового пользователя я могу пропустить электронное письмо с подтверждением:

user.skip_confirmation!

Однако иногда мне нужно вручную изменить адрес электронной почты от имени пользователя. И это не работает при смене электронной почты. Пример:

@user = User.find_by_email('[email protected]')
@user.email = '[email protected]'
@user.skip_confirmation!
@user.save!

Это все еще требует подтверждения пользователем электронной почты. Электронная почта не обновляется. И разработчик отправляет электронное письмо.

Любые идеи? Благодаря

4b9b3361

Ответ 1

Вы хотите использовать метод skip_reconfirmation! (обратите внимание на "re" при повторном подтверждении).

@user = User.find_by_email('[email protected]')
@user.email = '[email protected]'
@user.skip_reconfirmation!
@user.save!

Ответ 2

Попробуйте установить Devise.reconfirmable или User.reconfirmable (или любую другую вашу модель) на значение false. Вы можете установить его на config/initializers/devise.rb в этой строке:

# If true, requires any email changes to be confirmed (exctly the same way as
# initial account confirmation) to be applied. Requires additional unconfirmed_email
# db field (see migrations). Until confirmed new email is stored in
# unconfirmed email column, and copied to email column on successful confirmation.
config.reconfirmable = true

Вы также можете использовать метод Active Record update_column, который сохраняет поле без выполнения обратных вызовов или проверок.

Ответ 3

Вы можете использовать этот тип кода в своей модели # models/users.rb. Это отключит подтверждение электронной почты при обновлении:

def postpone_email_change?
  false 
end

или в вашем контроллере

def update
  user.email = params[:user][:email]
  user.skip_confirmation_notification!

  if user.save
    user.confirm
  end
end

Ответ 4

Если вы хотите пропустить только уведомление по электронной почте, сделайте следующее:

@user.skip_confirmation_notification!
@user.save