Laravel 5.3 — как просто получить токен из функции «забыли пароль»?

#laravel-5

#laravel-5

Вопрос:

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

Все, что мне нужно сделать, это получить токен, и только токен, из множества методов, которые, по-видимому, участвуют в сбросе пароля, и затем я могу сгенерировать электронное письмо и ссылку отдельно и отправить их через Mailjet.

Любые указания, которые кто-либо может дать, будут высоко оценены.

Ответ №1:

Токен, о котором вы говорите, генерируется, когда пользователь заполняет поле «Забыли пароль».

Токены находятся в таблице password_resets базы данных. В этой таблице вы увидите email и пользователя token . Токен, который вы хотите получить, — это токен там.

Чтобы получить токен, вы могли бы выполнить этот запрос:

 $pw_reset = DB::table('password_resets')->where('email', $user->email)->first();
 

Теперь вы можете просто сделать $pw_reset->token , чтобы получить токен пользователя. Убедитесь, что в вашей таблице есть запись, иначе вы получите исключение. Вы можете сделать это, заменив приведенное ->first() выше на ->firstOrFail()

Именно так вы получите токен сброса пароля.


Генерация токена без запроса пользователем электронной почты для сброса пароля

Если вы не хотите, чтобы пользователь заполнял поле «Забыли пароль» и запрашивал электронное письмо, а затем извлекал токен, вы можете вручную создать токен.

 $user = User::find(1) // Get the user with an ID of 1. This can be any user ID

$pw_reset = DB::table('password_resets')->insert(
    ['email' => $user->email, 'token' => str_random(255)]
);
 

Вы вставите свой пользовательский токен в базу данных и сможете получить недавно сохраненный токен с помощью $pw_reset->token .

Вот и все. Я дал вам 2 способа сохранить токены в базе данных и один способ извлечь токен из базы данных.

Комментарии:

1. Спасибо за ваш ответ — оба типа близки к тому, чего я надеюсь достичь, но ни один из них не попал в нос.

2. Извините — не понял, что он будет отправлен, когда я нажму return. Чтобы уточнить, я хочу, чтобы им нужно было заполнить форму, чтобы получить электронное письмо для сброса пароля, я хочу, чтобы они использовали встроенную функцию «забыли пароль», и я хочу, чтобы Laravel сгенерировал код и сохранил его в БД. Однако я не хочу, чтобы Laravel отправлял стандартное электронное письмо bog, и я хочу, Чтобы оно передавало соответствующие значения (user, token и т. Д.) В нашу функцию отправки Mailjet для всего сайта. Это немного проясняет ситуацию?

3. Чтобы продолжить работу над этим, я закончил тем, что пошел дальше по вашему второму маршруту и просто обошел функциональность сброса пароля Laravel, вместо этого просто используя функцию для заполнения таблицы сброса пароля генерируемым мной значением, вместо того, чтобы разбирать методологию Laravel — я принял ваш ответ, как и без негоЯ бы не подумал (!) просто установить токен сброса пароля самостоятельно.