2016-04-30 62 views
1

我收到错误“未初始化的常量User :: BCrypt”。未初始化的常量User :: BCrypt(版本相关?)

我查了一下这个问题:https://github.com/ryanb/nifty-generators/issues/68

建议的解决方案捆绑安装不工作(当然,我经常捆绑安装)。

我查了一下这个问题:https://github.com/codahale/bcrypt-ruby/issues/89

建议的解决方案来改变宝石,而不是“bcrypt-红宝石”只是“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 
+1

上codahale/bcrypt-红宝石#89建议请更新您的bcrypt,红宝石3.1.5。 – Sravan

回答

4

从我可以看到我不能看到你的用户模型都要求“bcrypt”

require 'bcrypt' 
class User < ActiveRecord::Base 
... 
end 
+0

好的,这解决了我的问题。我确定这不是必需的。我以前的项目没有它,工作得很好,但是,它的工作如此,谢谢! –

+0

关于这是否是新要求的任何说法?我很确定几周前我不需要这个。 –

+1

在这里的文档表明它需要https://github.com/codahale/bcrypt-ruby – Shani

0

除非你的应用程序纯粹是为了学习的目的,你应该认真考虑使用内置于导轨中的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在任何时候使会话无效。

事实上,您的模型不应该以任何方式意识到会话。

参见:

+0

这个任务是为了纯粹的学习目的推出自己的认证,是的。感谢您将我列入首选方法。 –

相关问题