OmniAuth запускает проверки - PullRequest
0 голосов
/ 18 июля 2011

Я использую OmniAuth в приложении, которое требует аутентификации.

У меня есть 3 способа аутентификации пользователей:

  1. Создать аккаунт на моем сайте
  2. Facebook через OmniAuth
  3. Твиттер через OmniAuth

Для варианта 1 у меня есть проверки в виде:

  validates_presence_of     :email, :role
  validates_presence_of     :password,                   :if => :password_required
  validates_presence_of     :password_confirmation,      :if => :password_required
  validates_length_of       :password, :within => 4..40, :if => :password_required
  validates_confirmation_of :password,                   :if => :password_required
  validates_length_of       :email,    :within => 3..100
  validates_uniqueness_of   :email,    :case_sensitive => false
  validates_format_of       :email,    :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
  validates_format_of       :role,     :with => /[A-Za-z]/

Проблема в том, что, когда я разрешаю пользователю войти в систему через твиттер / фейсбук в первый раз, когда создается учетная запись, проверки запускаются и завершаются ошибкой.

Например:

ActiveRecord :: RecordInvalid - проверка не удалась: пароль не может быть пустым, пароль слишком короткий (минимум 4 символа), подтверждение пароля не может быть пустым:

Это имеет смысл, так как созданные учетные записи OmniAuth не будут отправлять пароль, но я не уверен, как именно мне следует сообщить об этом моей модели и пропустить (конкретные?) Проверки.

Если это необходимо, полная модель account.rb здесь: http://pastie.org/private/wzpftprrzfg42uifetfhpa

Большое спасибо !!

1 Ответ

1 голос
/ 18 июля 2011

попробуйте извлечь условие в метод encrypt_password , отсюда эта строка кажется неправильной:

  # Callbacks
  before_save :encrypt_password, :if => :password_required

Вы также можете скопировать и вставить трассировку стека, пожалуйста?

...