我正在尝试允许用户使用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个字符)
有什么想法吗?
答案 0 :(得分:3)
您正在寻找的是一种简单地忽略密码验证的方法。这是一个称为渐进式参与的过程,最常用于创建用户帐户,但在用户真正需要它们进行更高级的系统操作之前,不需要特定的内容。您要做的是修改模型中的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/
答案 1 :(得分:0)
如果您没有将crypted_password字段放在用户模型中,则不会加载密码模块,因此验证将不会运行。
您会发现这是Authlogic中每个模块的常规行为。