Предполагается, что User.password должен быть нулевым при разработке? - PullRequest
0 голосов
/ 21 июня 2020

Я отлаживаю проблему в своем приложении Rails 6 с помощью Devise 4.7.1. Я не могу войти в систему с адресом электронной почты / паролем. (Я могу сбросить пароль и войти в систему таким образом или использовать вход в Facebook.)

Кажется, что пароль правильно добавляется в столбец users.encrypted_password. Он зашифрован, поэтому я не могу сказать наверняка, но столбец не пуст, когда я смотрю на него с помощью клиента mysql.

Я заметил, что когда я запускаю rails c для отладки, вот что Я получаю:

2.5.8 :048 > User.last.password
  User Load (2.5ms)  SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC LIMIT 1
 => nil 

User.password должно быть nil, или это ожидаемое поведение? Я пытаюсь понять, является ли это источником моей проблемы или это отвлекающий маневр.

Если есть способ отладить это в консоли rails, я могу быть уверен, что значение установлено правильно, это было бы полезно. например, User.last.password == some_hash_method('password').

User.encrypted_password возвращает значение:

2.5.8 :049 > User.last.encrypted_password
  User Load (3.5ms)  SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC LIMIT 1
 => "$2a$11$pMGOZ/a5YG3Z/QHQ3WZBRO0HpqOGpCRuWyxb6X___SNIPPED___" 

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Вы можете отладить это в консоли rails, @user - это объект пользователя, а «пароль» - это простой текстовый пароль, установленный пользователем. Это дает вам логическое значение true, если пароль действителен, иначе false.

@user.valid_password?("password")
1 голос
/ 21 июня 2020

user.password - это attr_accessor в разработке, он всегда будет равен нулю, когда вы инициируете пользователя после запроса его из базы данных. Пароль хешируется и сохраняется в поле encrypted_password после хеширования с помощью devise.

Пароли никогда не хранятся непосредственно в базе данных, так как это серьезная угроза безопасности. В целях отладки вы можете создать новый контроллер устройства и распечатать пароль, когда вы получите его из формы нового сеанса. Не делайте этого в производственной среде, так как это серьезная угроза безопасности

...