Необязательное подтверждение пароля Authlogic - PullRequest
3 голосов
/ 31 мая 2011

Можно ли с помощью AuthLogic подтвердить подтверждение пароля, если оно есть, но в противном случае игнорировать его?Итак, если мои параметры следующие, я бы хотел сбой:

{ user: { password: "abcd", password_confirmation: "defg" }

Однако, если параметры соответствуют следующим, я бы хотел успеха:

{ user: { password: "abcdefgh" } }

Спасибо!

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Это не вопрос AuthLogic, этот код должен выполнить свою задачу:

class User < ActiveRecord::Base
  ...

  def update_without_password_confirmation(params={})
    params.delete(:password) if params[:password_confirmation].blank?
    params.delete(:password_confirmation) if params[:password].blank?

    update_attributes(params)
   end      
end

и затем вызвать этот метод из контроллера, когда вам нужно обновить атрибуты в User.Если пользователь не указал password_confirmation, он будет проигнорирован.Вы можете использовать несколько других методов, чтобы получить тот же эффект, например, используя обратный вызов before_validation (: on =>: update).

UPDATE: если вы хотите вообще пропустить проверку пароля, act_as_authentic принимает блок длянастроить его поведение:

clas User < AR::Base
  acts_as_authentic do |u|
    u.require_password_confirmation=false # you can also use :if => some_condition
    u.validate_password_field=false
  end
end

это немного недокументировано: P проверьте этот файл: https://github.com/binarylogic/authlogic/blob/master/lib/authlogic/acts_as_authentic/password.rb

0 голосов
/ 05 апреля 2012
before_validate :check_password_confirmation
def check_password_confirmation
  if self.password_confirmation.blank?
    self.password = nil
  end
end

С дополнительным преимуществом, что вам не нужно беспокоиться о настройке или отключении элементов в ваших контроллерах - модель продолжает обновлять атрибуты в обычном режиме.

...