2011-07-17 95 views
0

我在需要验证的应用程序中使用OmniAuth。OmniAuth触发验证

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

  1. 我的网站上
  2. 的Facebook通过OmniAuth
  3. 的Twitter通过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]/ 

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

例如:

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

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

如果它有什么用途,全account.rb模型是在这里:http://pastie.org/private/wzpftprrzfg42uifetfhpa

非常感谢!

+0

我找到了一个方法,但我认为这是一个黑客攻击。我对此方法做了一个补充(如上面我的pastie所示)。 http://pastie.org/2229023 –

回答

1

尝试从这里提取条件为ENCRYPT_PASSWORD方法,此行似乎不正确:

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

可你也复制粘贴堆栈跟踪吗?