BCrypt InvalidHash с очисткой пароля сбрасывается - PullRequest
1 голос
/ 12 мая 2019

Я новичок в Rails, пришёл из PHP + Python. Я устанавливаю на своем компьютере среду разработки на основе дампа производственной базы данных.

Я не могу войти в свою среду разработки, поскольку при входе каждого пользователя происходит ошибка BCrypt InvalidHash, независимо от имени пользователя или пароля.

Я проверил хэш users.encrypted_password для своего пароля на онлайн-сайте BCrypt - он совпадает правильно.

Я написал быстрый скрипт для сброса всех паролей, чтобы увидеть, есть ли какая-то странная разница в конфигурации между моей машиной Fedora и конфигурацией prod Heroku:

User.find_each do |user|
  user.password = 'password'
  user.save
end

Но это все еще не удается с той же ошибкой InvalidHash, трассировка стека ниже:

/home/eric/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bcrypt-3.1.11/lib/bcrypt/password.rb:60:in `initialize': invalid hash (BCrypt::Errors::InvalidHash)
    from /home/eric/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bcrypt-3.1.11/lib/bcrypt/password.rb:46:in `new'
    from /home/eric/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bcrypt-3.1.11/lib/bcrypt/password.rb:46:in `create'
    from /home/eric/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/clearance-1.16.1/lib/clearance/password_strategies/bcrypt.rb:28:in `password='
    from /home/eric/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/clearance-1.16.1/lib/clearance/user.rb:111:in `password='
    from db/reset_passwords.rb:9:in `block in <top (required)>'

просвет.rb config:

Clearance.configure do |config|
  config.rotate_csrf_on_sign_in = true
  config.password_strategy = Clearance::PasswordStrategies::BCrypt
end

Подробности модели:

> User.column_names
=> ["id", "first_name", "email", "encrypted_password", "confirmation_token", "remember_token"]

Что я делаю не так? Похоже, что в моей среде разработчиков отсутствует какая-либо конфигурация.

1 Ответ

1 голос
/ 13 мая 2019

Кто-то предположил, что моя ОС виновата.Я попробовал простой BCrypt::Password.create("password"), который потерпел неудачу таким же образом.Это привело меня к их GitHub ...

https://github.com/codahale/bcrypt-ruby/issues/170

Так что bcrypt-ruby сломался на Fedora 28+.Версия 3.1.12 была нажата, чтобы исправить это.Наш проект все еще использовал 3.1.11.

Извлеченный урок: проверьте зависимые зависимости!

...