我收到错误"未初始化的常量User :: BCrypt"。
我查看了这个问题:https://github.com/ryanb/nifty-generators/issues/68
建议的捆绑安装解决方案不起作用(当然,我经常捆绑安装)。
我查看了这个问题:https://github.com/codahale/bcrypt-ruby/issues/89
建议的解决方案将宝石更改为' bcrypt-ruby'而不只是' bcrypt'确实将我的宝石更新为更新的版本,但没有解决问题。
这是我的用户模型
class User < ActiveRecord::Base
validates :username, :password_digest, :session_token, presence: true
validates :session_token, uniqueness: true
attr_reader :password
def self.find_by_credentials(username, password)
user = User.find_by_username(username)
user.try(:valid_password?, password) ? user : nil
end
def valid_password?(password)
BCrypt::Password.new(self.password_digest).is_password?(password)
end
def password=(password)
@password = password
self.password_digest = BCrypt::Password.create(password)
end
def reset_session_token
self.session_token = SecureRandom.urlsafe_base64
self.save!
self.session_token
end
end
答案 0 :(得分:4)
从我所看到的我无法看到你的用户模型中需要'bcrypt'
require 'bcrypt'
class User < ActiveRecord::Base
...
end
答案 1 :(得分:0)
除非您的申请纯粹是出于学习目的,否则您应该认真考虑使用内置于rails中的ActiveModel::SecurePassword
。
重新发明身份验证轮是最常见的安全故障之一。
# make sure your users table has a password_digest column!
class User < ActiveRecord::Base
has_secure_password
end
您也不会在数据库中的用户模型上存储会话令牌。相反,你应该使用内置会话机制的Rails。
rails中间件向所有访问者发出cookie中的会话标识符。 cookie只包含一个32字节长的MD5哈希,它链接到会话存储(默认存储在另一个cookie中)。
您可以通过拨打reset_session
随时使会话无效。
事实上,你的模型不应该以任何方式了解会话。
请参阅: