📅  最后修改于: 2023-12-03 15:28:10.908000             🧑  作者: Mango
如果您正在开发一个 Laravel 应用程序,并且需要让用户更新其密码,那么您可以使用 Laravel 内置的身份验证系统来轻松地实现此功能。
Laravel 内置了一个 ForgotPasswordController
控制器,它可以用来处理密码重置链接的生成和发送。下面是使用该控制器生成重设密码链接的步骤:
打开终端或命令行窗口,切换到您的 Laravel 应用程序的根目录。
运行以下 Artisan 命令来生成 ForgotPasswordController
控制器和相应的路由:
php artisan make:auth
修改 resources/views/auth/passwords/email.blade.php
视图以使用您的应用程序的样式和内容。这个视图将用于显示包含重置密码链接的电子邮件。
在 app/Http/Controllers/Auth/ForgotPasswordController.php
文件中,确保以下方法正常工作:
public function showLinkRequestForm()
{
return view('auth.passwords.email');
}
在 routes/web.php
文件中,确保以下路由定义在 Route::group(['middleware' => 'web'])
中:
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
运行以下 Artisan 命令来启动您的本地开发服务器:
php artisan serve
在浏览器中访问 http://localhost:8000/password/reset
,您将看到一个包含一个电子邮件输入框的页面。在该输入框中输入您的注册电子邮件地址,并单击“发送密码重置链接”按钮。
注意:如果您收到错误消息“Class 'App\Mail\Mail' not found”,那么您需要手动创建一个邮件模板。
一旦用户收到了包含密码重置链接的电子邮件,就可以单击该链接并访问 password/reset
页面。该页面将显示一个包含“新密码”和“确认密码”的表单。以下是使用该表单更新密码的步骤:
在 app/Http/Controllers/Auth/ResetPasswordController.php
文件中,确保以下方法正常工作:
public function showResetForm(Request $request, $token = null)
{
return view('auth.passwords.reset')->with(
['token' => $token, 'email' => $request->email]
);
}
public function reset(Request $request)
{
$request->validate($this->rules(), $this->validationErrorMessages());
$this->broker()->validator(function (array $credentials) {
return $credentials['password'] === $credentials['password_confirmation'];
});
$response = $this->broker()->reset(
$this->credentials($request), function ($user, $password) {
$this->resetPassword($user, $password);
}
);
return $response == Password::PASSWORD_RESET
? $this->sendResetResponse($request, $response)
: $this->sendResetFailedResponse($request, $response);
}
在 resources/views/auth/passwords/reset.blade.php
视图中,确保以下代码片段存在:
<form method="POST" action="{{ route('password.update') }}">
@csrf
<input type="hidden" name="token" value="{{ $token }}">
<div>
<label for="email">{{ __('E-Mail Address') }}</label>
<div>
<input id="email" type="email" name="email" value="{{ $email ?? old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div>
<label for="password">{{ __('Password') }}</label>
<div>
<input id="password" type="password" name="password" required autocomplete="new-password">
@error('password')
<span role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div>
<label for="password-confirm">{{ __('Confirm Password') }}</label>
<div>
<input id="password-confirm" type="password" name="password_confirmation" required autocomplete="new-password">
</div>
</div>
<div>
<div>
<button type="submit">
{{ __('Reset Password') }}
</button>
</div>
</div>
</form>
在 routes/web.php
文件中,确保以下路由定义在 Route::group(['middleware' => 'web'])
中:
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update');
运行以下 Artisan 命令来启动您的本地开发服务器:
php artisan serve
在浏览器中访问包含密码重置链接的电子邮件中的链接并访问 password/reset/{token}
页面。您将看到一个包含“新密码”和“确认密码”的表单。在该表单中输入您的新密码,然后单击“重置密码”按钮以更新您的密码。
Laravel 的身份验证系统使更新密码变得非常简单。您只需遵循上述步骤,就可以让用户轻松地更新他们的密码。