rails 4.2.4 Неинициализированный постоянный пользователь::BCRYPT
У меня есть приложение rails с авторизацией для входа в систему, которую я получил из учебного пособия по RoR от Micheal Hartl. Логин имеет запомнить меня для логинов cookie. Проблема в том, что когда пользовательский cookie существует, и я запускаю приложение rails, я получаю эту ошибку
Processing by PagesController#index as HTML
User Load (1.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 37 LIMIT 1
Completed 500 Internal Server Error in 6ms (ActiveRecord: 1.0ms)
NameError (uninitialized constant User::BCRYPT):
app/models/user.rb:30:in `authenticated?'
app/helpers/sessions_helper.rb:12:in `current_user'
app/helpers/sessions_helper.rb:20:in `logged_in?'
app/controllers/pages_controller.rb:5:in `index'
Вход в систему без запомнить меня работает нормально. Я пробовал решения, которые я нашел, например, добавление тега require в gemfile или в пользовательскую модель. Я даже опустил рубин с 2.2.3 до 2.1.7, чтобы посмотреть, исправится ли он, но это не так.
это моя пользовательская модель
require 'bcrypt'
class User < ActiveRecord::Base
attr_accessor :remember_token
has_many :crates, dependent: :destroy
before_save { self.email = email.downcase }
validates :alias, presence:true, length: {maximum: 50}, uniqueness:{case_sensitive: true}
validates :email, presence:true, length:{maximum: 255}, uniqueness:{case_sensitive: false}#,format:{with: VALID_EMAIL_REGEX}
has_secure_password
validates :password, presence: true, length: {minimum: 6}, allow_nil: true
def self.digest(string)
cost = ActiveModel::SecurePassword.min_cost ? BCRYPT::ENGINE::MIN_COST : BCRYPT::ENGINE.cost
BCRYPT::PASSWORD.create(string, cost: cost)
end
def User.new_token
SecureRandom.urlsafe_base64
end
# Remembers a user in the database for use in persistent sessions.
def remember
self.remember_token = User.new_token
update_attribute(:remember_digest, self.remember_token)
end
# Returns true if the given token matches the digest.
def authenticated?(remember_token)
return false if remember_digest.nil?
BCRYPT::PASSWORD.new(remember_digest).is_password?(remember_token)
end
# Forgets a user (cookies)
def forget
update_attribute(:remember_digest, nil)
end
конец
1 ответ
В вашем правописании есть ошибка. Правильная форма должна быть BCrypt
,
Например:
BCrypt::Password.create(string, cost: cost)
Надеюсь, это поможет.