我正在尝试在rails中实现用户身份验证系统,这是我的模型:
class User < ActiveRecord::Base
attr_accessible :id, :email, :name, :password, :created_at, :updated_at
has_secure_password
before_save { email.downcase! }
validates :email, presence: true, :uniqueness => { :case_senstive => false }
validates :name, presence: true
validates :password, presence: true, length: { minimum: 6 }
end
在控制台中运行我可以成功读取User表,然后当我尝试创建记录时:
User.new(:name => "A", :email => "a@a.a", :password => "password")
在其上运行valid
会重新发送true
,但在保存记录时,我会收到错误:
users.password may not be NULL
从password
中提取hash
可以正常工作。
有什么问题?
由于
答案 0 :(得分:0)
你在哪里设置:password_confirmation
?文档中的示例表明您需要它。
http://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html
答案 1 :(得分:0)
主要问题在has_secure_password
。如果您正在使用它,则应该有字符串字段:password_digest
(这是您保存加密密码的位置)。您还需要删除字段:password
和您的存在验证器。添加gem 'bcrypt-ruby', '~> 3.0.0'
后。
现在这应该工作
user = User.new(:name => "A", :email => "a@a.a",
:password => "password", :password_confirmation => "password")
但最好使用伟大的宝石https://github.com/plataformatec/devise。它拥有您需要的一切。
新添加
attr_accessible
也应:password_confirmation
,并且该字段应在您的表单中使用。