Я бы сделал это следующим образом, добавив методы доступа old_password, reset_password (логическое значение, которое мы установили в true при сбросе пароля):
attr_accessor :old_password, :reset_password
Теперь нам нужно подтвердить старый пароль при обновлении, но несброс:
validate :old_password_valid, :unless => [:reset_password]
def old_password_valid
errors.add(:old_password, "You must introduce your password") if !new_record? && !valid_password?(old_password)
end
До сих пор мы проверяли, что старый пароль действителен, когда пользователь обновляет свой профиль.
Теперь, чтобы запросить новый пароль или нет, Authlogicдобавляет метод 'require_password?'к вашей модели пользователя, вы должны переопределить его.Я сделал это так:
def require_password?
password_changed? || (crypted_password.blank? && !new_record?) || reset_password
end
В основном запрашивает пароль (и подтверждение), когда: 1) пользователь обновляет пароль, 2) пользователь активирует свою учетную запись (поэтому у него все еще нет пароля), 3) пользователь сбрасывает пароль.
Надеюсь, это поможет.