Я разрабатываю простое приложение для аутентификации Ruby с помощью Sinatra и DataMapper.
Я успешно реализовал метод хеширования пароля, когда пользователи регистрируются, но я не могу заставить маршрут аутентификации работать, он просто не соответствует предоставленному паролю с хешированной версией, хранящейся в БД (MySQL).
После прочтения большого количества документации, множества вопросов здесь, посвященных stackoverflow, и повторной документации, я прошу вашей помощи.
Я создал простой маршрут GET, чтобы попытаться понять, как работает библиотека BCrypt, без сохранения пароля в БД, цель этого маршрута — просто понять, как использовать библиотеку:
get "/test" do
password_hash = BCrypt::Password.create("wazz")
password = "wazz"
puts password_hash
if BCrypt::Password.new(password_hash).is_password? password
status 201
end
halt(500, {error: password_hash}.to_json)
end
Итак, в основном все, что мне нужно сделать, это отправить запрос GET в /test, и все должно быть сделано, но это не так, BCrypt::Password.new, похоже, не проверяет исходный пароль на соответствие хешированному.
Заранее спасибо, любая помощь будет очень признательна.
password_hash.is_password?( password )
в качестве теста - person Neil Slater   schedule 12.03.2015status 201
, затем останавливаетесь со статусом, установленным обратно на 500 . . . поэтому этот код всегда останавливается с ошибкой сервера, независимо от того, что случилось с паролем. В bcrypt нет ничего плохого, просто вам нужно инвертировать логику в маршруте Sinatra. - person Neil Slater   schedule 12.03.2015