0

我正在尝试在 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.new(:name => "A", :email => "a@a.a", :password => "password")

valid在它上面运行会返回true,但是在保存记录时,我得到错误:

users.password may not be NULL

从作品中提取password出来的hash东西很好。

问题是什么?

谢谢

4

2 回答 2

0

你在哪里设置:password_confirmation?文档中的示例表明您需要它。

http://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html

于 2013-06-20T22:47:08.990 回答
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")

但最好使用伟大的 gem https://github.com/plataformatec/devise。它有你需要的一切。

新增

你也应该有attr_accessible这个:password_confirmation字段,应该在你的表单中使用。

有关 has_secure_password 的更多信息

于 2013-06-20T22:50:46.100 回答