Разработать повторно - программирование

Разработать повторно

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

Большая проблема заключается в том, что письмо никогда не отправляется...

Моя настройка с разработкой 2.1.2:

модель пользователя:

attr_accessible: unconfirmed_email, ...

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

в инициализаторе devise.rb:

config.reconfirmable = true

в маршрутах:

devise_for :users

в том случае, если поле модели unconfirmed_email установлено правильно. Я проверил это через консоль.

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

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

module Devise::Models::Confirmable
  def send_confirmation_instructions
    debugger
  end
end

похоже, что send_confirmation_instructions никогда не вызывается, так как я никогда не добираюсь до отладчика.

Мне нужно как-то перезвонить по вызову или автоматически запускается при установке атрибута модели "unconfirmed_email" на новый адрес электронной почты?

Благодарим за любую помощь, к.

4b9b3361

Ответ 1

Хорошо, это неловко..

После погружения в код Devise я понял, что вам не нужно устанавливать атрибут unconfirmed_email вашей модели пользователя, но просто измените существующий атрибут электронной почты. Атрибут unconfirmed_email используется только внутри устройства, чтобы сохранить адрес электронной почты, пока он не будет подтвержден.

Более поздняя версия devem gem объясняет это при начальной миграции. Вот раздел "Подтверждаемый" (обратите внимание на комментарий в последней строке) из XXX_devise_create_users.rb migration:

  ## Confirmable
  t.string   :confirmation_token
  t.datetime :confirmed_at
  t.datetime :confirmation_sent_at
  t.string   :unconfirmed_email # Only if using reconfirmable

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