未初始化常量 User::BCrypt(与版本相关?)
uninitialized constant User::BCrypt (version related?)
我收到错误 "uninitialized constant User::BCrypt"。
我检查了这个问题:https://github.com/ryanb/nifty-generators/issues/68
建议的捆绑安装解决方案不起作用(当然,我经常捆绑安装)。
我检查了这个问题:https://github.com/codahale/bcrypt-ruby/issues/89
将 gem 更改为 'bcrypt-ruby' 而不仅仅是 'bcrypt' 的建议解决方案确实将我的 gem 更新为更新版本,但没有解决问题。
这是我的用户模型
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
据我所知,我看不到在您的用户模型中需要 'bcrypt'
require 'bcrypt'
class User < ActiveRecord::Base
...
end
除非您的应用程序纯粹用于学习目的,否则您应该认真考虑使用 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
使会话无效。
事实上,您的模型不应该以任何方式知道会话。
参见:
我收到错误 "uninitialized constant User::BCrypt"。
我检查了这个问题:https://github.com/ryanb/nifty-generators/issues/68
建议的捆绑安装解决方案不起作用(当然,我经常捆绑安装)。
我检查了这个问题:https://github.com/codahale/bcrypt-ruby/issues/89
将 gem 更改为 'bcrypt-ruby' 而不仅仅是 'bcrypt' 的建议解决方案确实将我的 gem 更新为更新版本,但没有解决问题。
这是我的用户模型
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
据我所知,我看不到在您的用户模型中需要 'bcrypt'
require 'bcrypt'
class User < ActiveRecord::Base
...
end
除非您的应用程序纯粹用于学习目的,否则您应该认真考虑使用 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
使会话无效。
事实上,您的模型不应该以任何方式知道会话。
参见: