пользовательский API для сброса пароля в laravel 5.7

по умолчанию токен сброса пароля, отправляемый по электронной почте, отличается от того, который сохраняется в базе данных. Я использовал Hasher::make() и hash_hmac('sha256', $token, env('APP_KEY')), чтобы хешировать это, а затем сравнить этот токен с базой данных, но безуспешно. что мне делать, чтобы преобразовать токен, отправленный по электронной почте, в токен базы данных или сравнить их? я тоже пробовал

public function convertToken($token)
    {
        if (Str::startsWith($key = env('APP_KEY'), 'base64:')) {
            $key = base64_decode(substr($key, 7));
        }
        return hash_hmac('sha256', $token, $key);
    }

person Ahmed Nawaz Khan    schedule 06.03.2019    source источник
comment
Почему бы вам не использовать шаблонный код из репозитория laravel?   -  person apokryfos    schedule 06.03.2019
comment
Что вы пытаетесь сделать с помощью этого метода? Вы пытаетесь вернуть хешированное значение для отправки по электронной почте или хешированное значение для сравнения со значением в базе данных?   -  person George Hanson    schedule 06.03.2019
comment
@apokryfos Я создаю API для сброса пароля. и плита котла, похоже, не работала с restful API, но с механизмом шаблонов   -  person Ahmed Nawaz Khan    schedule 06.03.2019
comment
@GeorgeHanson $token - это то, что я получил из электронного письма, которое было отправлено мне после сброса пароля, и я думаю, что после выполнения convertToken($token) я смогу преобразовать этот токен в то, что он есть в базе данных.   -  person Ahmed Nawaz Khan    schedule 06.03.2019


Ответы (1)


Хэшер, используемый реализацией Laravel по умолчанию, можно получить с помощью

$hasher = Password::broker()->getRepository()->getHasher();

Затем вы можете хешировать свой токен, чтобы добавить его в свою базу данных следующим образом:

$hasher->make($token);

И вы можете проверить токен на соответствие значению, хранящемуся в вашей базе данных, с помощью этого кода:

$hasher->check($token, $databaseToken);

Но зачем вам самим реализовывать то, что уже сделала команда Laravel? Вам лучше использовать аутентификацию Laravel по умолчанию, если только вы не делаете это для развлечения.

person Adrien    schedule 06.03.2019
comment
Здравствуй. плита котла, похоже, работала не с успокоительным API, а с механизмом шаблонов. На самом деле мне нужно взять токен, отправленный по электронной почте, и найти запись в базе данных с этим токеном, чтобы проверить его. - person Ahmed Nawaz Khan; 06.03.2019
comment
или адрес электронной почты, отправленный мне, просто содержит токен. Как я должен иметь дело с $databasetoken в этом случае? - person Ahmed Nawaz Khan; 06.03.2019
comment
Вы по-прежнему можете использовать шаблон Laravel и изменить контроллеры по умолчанию, чтобы они соответствовали вашему RESTful API. Они находятся в app/Http/Controllers/Auth. - person Adrien; 06.03.2019
comment
@AhmedNawazKhan Поскольку функция Hasher::make() не дает каждый раз один и тот же результат, вам нужно сначала получить токен. Вы можете связать токен с уникальным столбцом, чтобы получить его, например, электронную почту (как это делает Laravel github.com/laravel/framework/blob/5.7/src/Illuminate/Auth/ ) - person Adrien; 06.03.2019
comment
это не так, потому что без API, когда вы нажимаете на ссылку, отправленную по электронной почте, вы перенаправляетесь на страницу, где вам нужно указать свою электронную почту и новый пароль. поэтому фактический запрос выполняется через электронную почту, а не через токен. Я могу API, мы должны найти запись внутри таблицы через токен - person Ahmed Nawaz Khan; 06.03.2019
comment
так что, может быть, мне тоже нужно электронное письмо в этой ссылке, отправленной по электронной почте? - person Ahmed Nawaz Khan; 06.03.2019
comment
Токен находится в скрытом вводе, токен и электронная почта используются для проверки изменения пароля. - person Adrien; 06.03.2019
comment
поэтому я должен добавить электронную почту к ссылке, которая отправляется в почтовый ящик. если да, то как мне это сделать? - person Ahmed Nawaz Khan; 06.03.2019
comment
Сгенерированная ссылка, которую вы включите в электронное письмо, будет иметь вид https://server/reset?email=$userEmail&token=$token. - person Adrien; 06.03.2019
comment
Как я могу это сделать? - person Ahmed Nawaz Khan; 06.03.2019
comment
Как генерируется токен в настоящее время? Как он хранится в настоящее время? Как отправляется письмо? - person Adrien; 06.03.2019
comment
я просто хочу добавить ?email=example.com к ссылке, приложенной к электронному письму - person Ahmed Nawaz Khan; 06.03.2019
comment
Давайте продолжим обсуждение в чате. - person Adrien; 06.03.2019