OmniAuth触发验证

时间:2011-07-17 21:03:50

标签: ruby facebook authentication twitter omniauth

我在需要身份验证的应用程序中使用OmniAuth。

我有3种方式供用户进行身份验证:

  1. 在我的网站上创建一个帐户
  2. Facebook通过OmniAuth
  3. Twitter通过OmniAuth
  4. 对于选项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]/
    

    问题在于,当我第一次允许用户通过twitter / facebook登录时,会触发验证并失败。

    例如:

      

    ActiveRecord :: RecordInvalid - 验证失败:密码不能为空,密码太短(最少4个字符),密码确认不能为空:

    这是有道理的,因为OmniAuth创建的帐户不会提交密码,但我不确定我应该如何让我的模型知道这一点并跳过(特定的?)验证。

    如果它有用,完整的account.rb模型就在这里:http://pastie.org/private/wzpftprrzfg42uifetfhpa

    非常感谢!!

1 个答案:

答案 0 :(得分:1)

尝试从此处将条件提取到 encrypt_password 方法,此行似乎不正确:

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

你能复制粘贴堆栈跟踪吗?