我在需要身份验证的应用程序中使用OmniAuth。
我有3种方式供用户进行身份验证:
对于选项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 :(得分:1)
尝试从此处将条件提取到 encrypt_password 方法,此行似乎不正确:
# Callbacks
before_save :encrypt_password, :if => :password_required
你能复制粘贴堆栈跟踪吗?