Я использую систему аутентификации Laravel для отправки приветственного письма всем новым пользователям. В основном он работает нормально, но у меня было несколько отдельных случаев, когда я получал ошибку «токен сброса пароля недействителен».
Чтобы диагностировать это, я хотел бы иметь возможность вручную сравнивать строки, указанные в URL-адресе пользователя (то есть токен, который я отправил им по электронной почте), со значением, хранящимся в поле password_resets.token. Как я могу это сделать?
Токен в URL-адресе выглядит как 64 шестнадцатеричных символа. Токен в базе данных начинается с $2y$10$, поэтому я предполагаю, что это результат функции password_hash. Как я могу переводить с одного на другой?






Прежде всего, я хочу сказать, что токен в URL-адресе не является результатом работы функции password_hash.
Чтобы сравнить токен в URL-адресе и то, что сгенерировано или сохранено, вы можете проверить в своей базе данных. Проверьте таблицу password_resets, проверьте электронную почту пользователя, найдите токен, соответствующий этому адресу электронной почты.
Токен в URL-адресе должен быть таким же, как и в базе данных для адреса электронной почты.
Альтернативой является проверка, эквивалентен ли один другому (это означает, что один является хешированной / нехешированной версией другого). Для этого вы можете использовать функцию Hash :: check (). Из документы:
Verifying A Password Against A Hash
The check method allows you to verify that a given plain-text string corresponds to a given hash. However, if you are using the
LoginControllerincluded with Laravel, you will probably not need to use this directly, as this controller automatically calls this method:if (Hash::check('plain-text', $hashedPassword)) { // The passwords match... }