所以我有一些有趣的密码验证要求:
当用户注册时,我希望他们必须输入密码并确认并在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
,因此未验证密码。 (因此更新空密码的情况有效)
任何想法/魔术?
答案 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? }