📜  请求更新密码 laravel - PHP (1)

📅  最后修改于: 2023-12-03 15:28:10.908000             🧑  作者: Mango

请求更新密码

如果您正在开发一个 Laravel 应用程序,并且需要让用户更新其密码,那么您可以使用 Laravel 内置的身份验证系统来轻松地实现此功能。

步骤 1:创建重设密码链接

Laravel 内置了一个 ForgotPasswordController 控制器,它可以用来处理密码重置链接的生成和发送。下面是使用该控制器生成重设密码链接的步骤:

  1. 打开终端或命令行窗口,切换到您的 Laravel 应用程序的根目录。

  2. 运行以下 Artisan 命令来生成 ForgotPasswordController 控制器和相应的路由:

    php artisan make:auth
    
  3. 修改 resources/views/auth/passwords/email.blade.php 视图以使用您的应用程序的样式和内容。这个视图将用于显示包含重置密码链接的电子邮件。

  4. app/Http/Controllers/Auth/ForgotPasswordController.php 文件中,确保以下方法正常工作:

    public function showLinkRequestForm()
    {
        return view('auth.passwords.email');
    }
    
  5. 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');
    
  6. 运行以下 Artisan 命令来启动您的本地开发服务器:

    php artisan serve
    
  7. 在浏览器中访问 http://localhost:8000/password/reset,您将看到一个包含一个电子邮件输入框的页面。在该输入框中输入您的注册电子邮件地址,并单击“发送密码重置链接”按钮。

    注意:如果您收到错误消息“Class 'App\Mail\Mail' not found”,那么您需要手动创建一个邮件模板。

步骤 2:更新密码

一旦用户收到了包含密码重置链接的电子邮件,就可以单击该链接并访问 password/reset 页面。该页面将显示一个包含“新密码”和“确认密码”的表单。以下是使用该表单更新密码的步骤:

  1. 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);
    }
    
  2. 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>
    
  3. 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');
    
  4. 运行以下 Artisan 命令来启动您的本地开发服务器:

    php artisan serve
    
  5. 在浏览器中访问包含密码重置链接的电子邮件中的链接并访问 password/reset/{token} 页面。您将看到一个包含“新密码”和“确认密码”的表单。在该表单中输入您的新密码,然后单击“重置密码”按钮以更新您的密码。

结论

Laravel 的身份验证系统使更新密码变得非常简单。您只需遵循上述步骤,就可以让用户轻松地更新他们的密码。