可选密码确认Authlogic

时间:2011-05-31 00:02:46

标签: ruby-on-rails authlogic

是否可以让AuthLogic验证密码确认(如果存在),否则忽略它?所以,如果我的参数如下,我会失败:

{ user: { password: "abcd", password_confirmation: "defg" }

但是,如果参数如下,我想取得成功:

{ user: { password: "abcdefgh" } }

谢谢!

2 个答案:

答案 0 :(得分:2)

它不是AuthLogic的问题,这段代码可以解决问题:

class User < ActiveRecord::Base
  ...

  def update_without_password_confirmation(params={})
    params.delete(:password) if params[:password_confirmation].blank?
    params.delete(:password_confirmation) if params[:password].blank?

    update_attributes(params)
   end      
end

然后在需要更新User上的属性时从控制器调用此方法。如果用户未指定password_confirmation,则将忽略该密码。 您可以使用其他几种技术来获得相同的效果,例如,使用before_validation(:on =&gt;:update)回调。

更新:如果您想要完全跳过密码验证,acts_as_authentic会接受一个块来自定义其行为:

clas User < AR::Base
  acts_as_authentic do |u|
    u.require_password_confirmation=false # you can also use :if => some_condition
    u.validate_password_field=false
  end
end

这有点没有记录:P检查这个文件: https://github.com/binarylogic/authlogic/blob/master/lib/authlogic/acts_as_authentic/password.rb

答案 1 :(得分:-1)

before_validate :check_password_confirmation
def check_password_confirmation
  if self.password_confirmation.blank?
    self.password = nil
  end
end

额外的好处是您不必担心在控制器中设置或取消设置 - 模型会继续正常更新update_attribute。