Чтобы передать токен сброса пароля с почты на страницу формы в Laravel REST API, вам потребуется реализовать следующие шаги:
1. Создайте маршрут и метод контроллера для отображения страницы с формой сброса пароля. Например, вы можете добавить следующий код в файл маршрутов routes/api.php
:
Route::get('/password/reset/{token}', 'PasswordResetController@showResetForm');
2. Создайте контроллер PasswordResetController
, реализующий метод showResetForm
, который будет отвечать за отображение страницы с формой сброса пароля. В этом методе вы должны передать токен сброса пароля в представление:
<?php namespace AppHttpControllers; use IlluminateHttpRequest; class PasswordResetController extends Controller { public function showResetForm($token) { return view('password.reset', ['token' => $token]); } }
3. Создайте представление для отображения формы сброса пароля. Например, вы можете создать файл resources/views/password/reset.blade.php
со следующим кодом:
<!DOCTYPE html> <html> <head> <title>Password Reset</title> </head> <body> <h1>Password Reset</h1> <form method="POST" action="/api/password/reset"> <input type="hidden" name="token" value="{{ $token }}"> <div> <label for="email">Email</label> <input type="email" name="email" id="email" required> </div> <div> <label for="password">New Password</label> <input type="password" name="password" id="password" required> </div> <div> <label for="password_confirmation">Confirm New Password</label> <input type="password" name="password_confirmation" id="password_confirmation" required> </div> <div> <button type="submit">Reset Password</button> </div> </form> </body> </html>
4. Реализуйте маршрут и метод контроллера для выполнения сброса пароля. Например, вы можете добавить следующий код в файл маршрутов routes/api.php
:
Route::post('/password/reset', 'PasswordResetController@resetPassword');
5. В методе контроллера PasswordResetController@resetPassword
вы должны использовать токен сброса пароля, который был передан с формы, и выполнить сброс пароля, используя Laravel's Password Reset Service:
<?php namespace AppHttpControllers; use IlluminateHttpRequest; use IlluminateSupportFacadesPassword; class PasswordResetController extends Controller { public function resetPassword(Request $request) { $request->validate([ 'token' => 'required', 'email' => 'required|email', 'password' => 'required|confirmed|min:8', ]); $response = $this->broker()->reset( $request->only('email', 'password', 'password_confirmation', 'token'), function ($user, $password) { $user->password = bcrypt($password); $user->save(); } ); if ($response == Password::PASSWORD_RESET) { return response()->json(['message' => 'Password has been reset successfully']); } else { return response()->json(['message' => 'Failed to reset password'], 400); } } private function broker() { return Password::broker(); } }
Теперь, когда вы переходите по URL /password/reset/{token}
, где {token}
- это токен сброса пароля, вы будете перенаправлены на страницу с формой сброса пароля, где токен будет передан как скрытое поле. После заполнения формы и отправки данных, пароль будет сброшен.