未初始化的常量User :: BCrypt(版本相关?)

时间:2016-04-30 06:08:34

标签: ruby-on-rails bcrypt

我收到错误"未初始化的常量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

2 个答案:

答案 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随时使会话无效。

事实上,你的模型不应该以任何方式了解会话。

请参阅: