【发布时间】:2015-09-15 22:20:00
【问题描述】:
我观察到密码摘要在我的 rails 4 应用程序中无法正常工作 - 密码摘要以明文形式存储在数据库中。
user.rb
class User < ActiveRecord::Base
has_secure_password
validates :password_digest, length: { minimum: 6 }
end
我的用户db迁移文件如下:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :full_name
t.string :email
t.string :password_digest
t.timestamps null: false
end
end
end
任何想法我做错了什么?
编辑 我在 Gemfile 中启用了 bcrypt(我运行了 bundle install)
gem 'bcrypt', '~> 3.1.7'
当我尝试在 Rails 控制台中进行测试时,我得到一个无效的哈希错误:
2.2.1 :011 > user = User.new(full_name: 'abcd', email: 'abc@abc.com', password_digest: 'abcdef')
=> #<User id: nil, full_name: "abcd", email: "abc@abc.com", password_digest: "abcdef", created_at: nil, updated_at: nil>
2.2.1 :012 > User.find_by(full_name: 'david').try(:authenticate, 'abcdef')
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."full_name" = ? LIMIT 1 [["full_name", "david"]]
BCrypt::Errors::InvalidHash: invalid hash
from /usr/local/rvm/gems/ruby-2.2.1/gems/bcrypt-3.1.10/lib/bcrypt/password.rb:60:in `initialize'
from /usr/local/rvm/gems/ruby-2.2.1/gems/activemodel-4.2.4/lib/active_model/secure_password.rb:102:in `new'
from /usr/local/rvm/gems/ruby-2.2.1/gems/activemodel-4.2.4/lib/active_model/secure_password.rb:102:in `authenticate'
【问题讨论】:
-
您的 Gemfile 中是否启用了
bcryptgem? -
是 - gem 'bcrypt', '~> 3.1.7'
标签: ruby-on-rails ruby ruby-on-rails-4