【问题标题】:Optional Password Confirmation Authlogic可选的密码确认验证逻辑
【发布时间】:2011-05-31 00:02:45
【问题描述】:

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

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

但是,如果参数如下所示,我希望成功:

{ user: { password: "abcdefgh" } }

谢谢!

【问题讨论】:

    标签: ruby-on-rails authlogic


    【解决方案1】:

    这不是 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
    

    然后当您需要更新用户的属性时,从控制器调用此方法。如果用户没有指定密码确认,它将被忽略。 您可以使用其他几种技术来获得相同的效果,例如,使用 before_validation(:on => :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

    【讨论】:

    • 有什么方法可以切换它,以便一般的“更新”或“创建”可以工作?我真的很喜欢这个应用程序。
    【解决方案2】:
    before_validate :check_password_confirmation
    def check_password_confirmation
      if self.password_confirmation.blank?
        self.password = nil
      end
    end
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-18
      • 2015-04-03
      • 2023-02-23
      • 2011-08-23
      • 2017-12-06
      • 2021-07-24
      • 2011-06-09
      • 1970-01-01
      相关资源
      最近更新 更多