所以我希望在has_secure_password中允许空的password_digest,但是看看ActiveModel :: SecurePassword似乎是硬编码的:
validates_presence_of :password_digest
覆盖这个的唯一方法是使用猴子补丁吗?
答案 0 :(得分:0)
我认为has_secure_password不会像你发现的那样做你想做的事。
所以不是使用has_secure_password,你可以编写自己的,基本上复制源代码并“分叉”它来做你想做的事情 - 只有生成并验证密码如果#user不是nil,它听起来像你想。
或者,正如jtomasri建议的那样,你可以创建一个Employee模型和一个User模型 - 你可以使用ActiveRecord'单表继承'功能让它们仍然在同一个表中,并拥有一个共同的超类您仍然可以获取(比如,Account.find返回符合您条件的员工和用户)。在某些方面,这是“更清洁”的解决方案,虽然它增加了幕后ActiveRecord内容的复杂性 - 在过去单表继承有点错误,我认为他们表现得很好这些天。 (有一段时间没用过它)。
答案 1 :(得分:0)
我刚遇到一个相关问题,并使用:if运算符进行验证。
validates :password ,..., :if => :employee_needs_password?
validates :password_confirmation , ... , :if => :employee_needs_password?
def employee_needs_password?
# check whatever your condition is and return true/false
end
答案 2 :(得分:-1)
如果您想要一个空密码,为什么要包含has_secure_password;如果您接受空密码,为什么要实现密码呢?无论如何你总是可以实现自己的摘要方法而不使用BCrypt的has_secure_password,从头开始有一个Railscast#250身份验证,你可以看到这个在行动