【问题标题】:OmniAuth triggering validationsOmniAuth 触发验证
【发布时间】:2011-10-07 07:00:33
【问题描述】:

我在需要身份验证的应用程序中使用 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]/

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

例如:

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

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

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

非常感谢!!

【问题讨论】:

  • 我找到了解决方法,但我认为这是一个 hack。我对这个方法做了一个补充(如上面我的馅饼所示)。 pastie.org/2229023

标签: ruby facebook authentication twitter omniauth


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2011-10-06
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多