我怎么能有时需要密码,有时候不需要使用has_secure_password?

我的应用程序允许人们使用密码或Facebook注册。

即使我从用户模型中删除了密码validation,我也会在用户模型上获得:password_digest => ["can't be blank"]

我使用has_secure_password

如何才能使password_digest不需要?

你不能。 has_secure_password自动为您的模型添加两个validation器:

 validates_confirmation_of :password validates_presence_of :password_digest 

相反,为没有password_digest的用户提供password_digest的虚拟值:

 user.password = user.password_confirmation = "" user.password_digest = "facebook-authorized account" 

这是安全的,因为没有密码可以被散列以匹配该摘要。

最近的提交已经向has_secure_password添加了一个选项哈希,它允许跳过password_digest字段的validation。 你这样使用它:

  has_secure_password :validations => false 

不幸的是,这不存在于3.2.13版本的rails中。 请参阅https://stackoverflow.com/a/16706045/1356792