Ruby on Rail's Authlogic gem - подтверждение пароля только для сброса пароля и страницы редактирования - PullRequest
0 голосов
/ 27 августа 2010

Я следовал учебному примеру Authlogic на github и все настроено и запущено.Но я хотел бы внести изменения, касающиеся подтверждения пароля.

Следуя инструкциям, вы должны ввести подтверждение пароля при регистрации.Я не хочу, чтобы это было необходимо, поэтому я положил c.require_password_confirmation = false в блок acts_as_authentic.Но это полностью удаляет подтверждение пароля.Я все еще хотел бы получить подтверждение пароля для страницы Изменить пользователя, когда они меняют свой пароль.Я также хотел бы иметь его для страницы сброса пароля (которую я в настоящее время не настроил).

Как мне это сделать?

Кроме того, хотя и не так важнона странице «Изменить пользователя» все в настоящее время представляет собой одну форму с одним значением «Обновление» в UsersController.Поэтому, если кто-то хочет изменить какую-то другую информацию, он также должен ввести свой текущий пароль, так как в настоящее время он настроен на меня так:требуется только, чтобы они вводили свой старый пароль, если они меняют свой адрес электронной почты или вводят новый пароль.

user.rb

<code>
class User < ActiveRecord::Base
  acts_as_authentic do |c|
    c.require_password_confirmation = false
  end<br>
  attr_accessor :old_password, :reset_password
  validate :old_password_valid, :on => :update, :unless => [:reset_password]<br>
  def old_password_valid
    errors.add(:old_password, "You must introduce your password") unless valid_password?(old_password)
  end<br>
  def require_password?
    password_changed? || (crypted_password.blank? && !new_record?) || reset_password
  end<br>
  def deliver_password_reset_instructions!
    reset_perishable_token!
    Notifier.deliver_password_reset_instructions(self)
  end
end

1 Ответ

0 голосов
/ 28 августа 2010

Я бы сделал это следующим образом, добавив методы доступа 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) пользователь сбрасывает пароль.

Надеюсь, это поможет.

...