首頁  >  文章  >  php框架  >  laravel怎麼實現重設密碼功能

laravel怎麼實現重設密碼功能

PHPz
PHPz原創
2023-04-21 10:05:491108瀏覽

在現代的 Web 應用中,使用者密碼的重設是一個不可或缺的功能。一個經過良好設計的密碼重置流程不僅能夠確保使用者的帳號安全,還能提升使用者的使用體驗。 Laravel 是一個受歡迎的 PHP Web 開發框架,其中也整合了一個方便的密碼重設系統。本文將介紹如何使用 Laravel 實現密碼重設功能。

環境準備

在開始之前,請確保您已經完成了以下安裝:

  • PHP 7.2 及以上版本
  • Composer 2 以上版本
  • Laravel 5.5 以上版本

如果您尚未安裝Laravel,可以透過以下指令在終端機中安裝:

composer create-project --prefer-dist laravel/laravel project-name

重設密碼流程

Laravel 的密碼重設流程是基於郵件通知,步驟如下:

    ##使用者提交信箱以及需要重設密碼的連結到應用程式;
  1. 應用程式發送帶有重置連結的郵件到使用者的郵箱;
  2. 使用者存取郵件連結;
  3. 應用程式判斷連結是否過期、合法;
  4. 如果連結合法,頁面出現輸入密碼的表單;
  5. 使用者填寫新密碼;
  6. 使用者提交表單;
  7. 應用程式重設使用者密碼。
因此,我們需要實作這個流程的每個步驟。

郵件設定

首先,我們需要在 Laravel 中設定郵件。打開

.env 文件,在其中添加如下配置:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mxhichina.com
MAIL_PORT=25
MAIL_USERNAME=youremail@example.com
MAIL_PASSWORD=yourpassword
MAIL_FROM_ADDRESS=youremail@example.com
MAIL_ENCRYPTION=
這裡的配置需要根據您的實際情況進行修改,

MAIL_DRIVER 指定了使用的郵件服務提供商,例如smtpmailgunsendmail 等,這裡我們使用了阿里雲郵件服務提供者smtp.mxhichina.com,並且需要填寫您的郵箱使用者名稱和密碼。 MAIL_FROM_ADDRESS 用於指定傳送郵件的傳送位址。

接下來,我們需要在

config/mail.php 檔案中設定郵件發送選項,例如設定寄件者名稱和位址:

'from' => [
    'address' => env('MAIL_FROM_ADDRESS', 'youremail@example.com'),
    'name' => env('MAIL_FROM_NAME', 'Your Name'),
],

#路由設定

現在,我們需要設定路由來處理密碼重設操作。在 Laravel 中,我們可以使用自備的 Password 控制器來處理重設密碼的邏輯。打開

routes/web.php 文件,新增以下路由:

// Password Reset Routes
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');
這裡我們在

Auth 中使用了兩個控制器,分別是ForgotPasswordControllerResetPasswordController,分別處理重設密碼郵件傳送和密碼重設作業。

檢視設定

接下來,我們需要新增視圖來展示使用者填寫郵件信箱和密碼的表單。我們可以使用類似以下程式碼片段的Blade 範本程式碼實作:

<form method="POST" action="{{ route(&#39;password.email&#39;) }}">
    @csrf
    <div>
        <input type="email" name="email" value="{{ old(&#39;email&#39;) }}" required autofocus placeholder="请输入您的邮箱地址">
    </div>
    <div>
        <button type="submit">发送重置密码链接</button>
    </div>
</form>
在這個頁面中,我們使用了一個表單來接受使用者填寫的郵件地址,並且新增了一個發送按鈕,點擊這個按鈕將會向該郵箱發送密碼重設連結。

我們還需要新增另一個視圖來允許使用者輸入新密碼。類似以下程式碼片段可以用來實作一個這樣的表單:

<form method="POST" action="{{ route(&#39;password.update&#39;) }}" >
    @csrf
    <input type="hidden" name="token" value="{{ $token }}">
    <div>
        <label for="email-input">邮箱</label>
        <input type="email" name="email" value="{{ $email ?? old(&#39;email&#39;) }}" required autofocus>
    </div>
    <div>
        <label for="password-input">新密码</label>
        <input type="password" name="password" required>
    </div>
    <div>
        <label for="password-confirm-input">确认新密码</label>
        <input type="password" name="password_confirmation" required>
    </div>
    <div>
        <button type="submit">重置密码</button>
    </div>
</form>
這個表單需要使用者填入新密碼和確認密碼,並且需要透過

$token$email 參數來驗證重置連結是否合法。這些參數可以在 ResetPasswordController@showResetForm 中取得。

控制器邏輯

我們在路由中使用了兩個控制器來處理密碼重設操作,分別是

ForgotPasswordControllerResetPasswordController

ForgotPasswordController 提供了一個 showLinkRequestForm() 方法,用於顯示使用者填入郵件位址的表單。另一個方法sendResetLinkEmail() 將會向使用者提供的郵箱地址發送含有密碼重設連結的郵件,其中使用了Password::sendResetLink() 方法來處理重設鏈接的生成和發送。

ResetPasswordController 中的showResetForm() 方法將會顯示使用者輸入新密碼的表單,如果重設連結不合法則會回到郵件連結過期的提示頁面。 reset() 方法則處理了使用者填入重設密碼表單並提交的邏輯,其中使用了 Password::reset() 方法來將使用者的密碼更新到資料庫中。

use Illuminate\Support\Facades\Password;

class ForgotPasswordController extends Controller
{
    use SendsPasswordResetEmails;
}

class ResetPasswordController extends Controller
{
    use ResetsPasswords;

    protected $redirectTo = '/home';

    public function showResetForm(Request $request, $token = null)
    {
        return view('auth.passwords.reset')->with(
            ['token' => $token, 'email' => $request->email]
        );
    }
}

使用密碼重設功能

現在,我們已經完成了Laravel 中的密碼重設功能的實現,我們來試著使用實現的功能進行密碼重設:

    開啟應用程式的登入頁面,點擊忘記密碼;
  1. 輸入您的註冊的郵箱,並點擊發送重設密碼連結按鈕;
  2. 打開您的郵箱,尋找並點擊密碼重設連結;
  3. 輸入您的新密碼,並確認新密碼;
  4. 點擊提交按鈕。
如果一切順利,您的密碼已重設成功!

總結#

在本文中,我們介紹如何使用 Laravel 實作一個基本的密碼重設功能。在現代的 Web 應用中,密碼重設是一項必備功能,只有經過良好設計與實現的密碼重設流程才能夠保障使用者帳號的安全與使用者的使用體驗。相信在您學習本文所述的技術,實現完整的密碼重設功能後,使用者的密碼安全和使用體驗會有所提升。

以上是laravel怎麼實現重設密碼功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn