【问题标题】:Why does setting validate_password_field to false disable all authlogic validations?为什么将 validate_password_field 设置为 false 会禁用所有 authlogic 验证?
【发布时间】:2011-08-04 18:53:54
【问题描述】:

我正在尝试允许用户使用 twitter 等外部服务注册我的应用程序。因此,我不需要 Authlogic 尝试验证的用户模型的密码。结果,我禁用了密码验证,如下所示:

acts_as_authentic
before_validation :update_authlogic_config
#In the case that the user has signed up with an omniauth service.
attr_accessor :needs_no_password
def update_authlogic_config     
    validate_password_field = !needs_no_password
end

这一切都很好,但它似乎也禁用了我想要保留的电子邮件/用户名验证。

因此,我更新了我的方法以确保电子邮件字段验证如下:

def update_authlogic_config
   validate_password_field = !needs_no_password
   ignore_blank_passwords = needs_no_password
   validate_email_field = true
end

使用它会拖回密码验证,给我以下错误:

密码太短(最少为 4 字符)

密码确认是 太短(最少 4 个字符)

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails validation passwords authlogic omniauth


    【解决方案1】:

    您正在寻找的是一种简单地忽略密码验证的方法。这是一个称为逐步参与的过程,最常用于创建用户帐户,但在用户真正需要它们以进行更高级的系统操作之前不需要特定的东西。您要做的是像这样修改模型中的 authlogic 配置:

    acts_as_authentic do |c|
      c.merge_validates_confirmation_of_password_field_options({:unless => :networked?})
      c.merge_validates_length_of_password_field_options({:unless => :networked?})
      c.merge_validates_length_of_password_confirmation_field_options({:unless => :networked?})
    end
    
    def networked?
      self.authentications.any? # or true/false boolean of some kind
    end
    

    我从以下要点获得此信息:http://gist.github.com/436707/

    【讨论】:

      【解决方案2】:

      如果您不将 crypted_pa​​ssword 字段放在用户模型中,您将不会加载密码模块,因此验证将不会运行。

      您会发现这是 Authlogic 中每个模块的常规行为。

      【讨论】:

        猜你喜欢
        • 2016-03-23
        • 2014-06-20
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-10
        • 1970-01-01
        相关资源
        最近更新 更多