Ruby on Rails密码验证

时间:2011-02-25 23:48:31

标签: ruby-on-rails validation

所以我有一些有趣的密码验证要求:

  • 当用户注册时,我希望他们必须输入密码并确认并在6..40之间(GOT THIS WORKING 100%)

  • 当用户更新其个人资料时,适用相同的验证规则(GOT THIS WORKING 100%)

  • 当管理员添加用户时,他们只需输入一次密码即可验证(NOT WORKIG)

  • 当管理员编辑用户并且密码字段为空时,它不应更新密码,如果输入密码,则应验证密码。 (部分工作)

    validates :password, :presence => true,
                       :confirmation => true,
                       :length => {:within => 6..40},
                       :unless => :force_submit
    

我无法涵盖的唯一情况是,当管理员添加用户时,未经过验证,当管理员编辑用户(并输入密码)时,不会对其进行验证。

从管理表单传入:force_submit,因此未验证密码。 (因此更新空密码的情况有效)

任何想法/魔术?

4 个答案:

答案 0 :(得分:28)

以下似乎符合我的要求......我实际上现在要求所有用户确认..(它使视图更清晰)。但是在更新时我允许空白。

  validates :password, :presence => true,
                       :confirmation => true,
                       :length => {:within => 6..40},
                       :on => :create
  validates :password, :confirmation => true,
                       :length => {:within => 6..40},
                       :allow_blank => true,
                       :on => :update

答案 1 :(得分:27)

稍微根据接受的答案构建,这是我在Rails项目中使用的代码。 (注意:我们使用devise来处理用户身份验证,使用devise_invitable来创建新用户。)

import com.rabbitmq.client.ConnectionFactory;

...

ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setAutomaticRecoveryEnabled(true);
        connectionFactory.setHost("some://host");
        connectionFactory.setConnectionTimeout(5000);
        connectionFactory.setRequestedHeartbeat(5); // keeps an idle connection alive

答案 2 :(得分:0)

这适用于更新操作的空白密码:

validates :password, :presence => true, :on => :update,
 :if => lambda{ !password.nil? }

validates :password,
  :confirmation => true,
  :length => { :minimum => 6},
  :if => lambda{ new_record? || !password.nil? }

答案 3 :(得分:0)

又一个变种

validates_presence_of :password_digest

validates_length_of :password, minimum: 6, if: Proc.new { |user| user.password.present? }