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

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

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

user.skip_confirmation!

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

@user = User.find_by_email('bob@site.com')
@user.email = 'dead@site.com'
@user.skip_confirmation!
@user.save!

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

Есть идеи? Спасибо

Ответы [ 4 ]

64 голосов
/ 13 октября 2012

Для обновлений вы можете использовать update_attributes или просто save и skip_reconfirmation! (обратите внимание на ' re' в подтверждении).

@user.skip_reconfirmation!

respond_to do |format|
  if @user.update_attributes(params[:user])
    ...
end
12 голосов
/ 20 марта 2012

Попробуйте установить для 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

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

5 голосов
/ 21 июня 2017

Вы можете использовать этот вид кода в вашей модели # 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
1 голос
/ 30 июня 2015

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

@user.skip_confirmation_notification!
@user.save
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...