重設密碼


重設密碼後

自訂

簡介

{tip}

想要快速上手?

只需要在新建的Laravel 應用程式中執行
php artisan make:auth

,然後在瀏覽器中開啟 http://your-app.test/register# 或給你的應用分配任一個URL。這個命令將會負責搭建整個身分驗證系統,包括重設密碼!

大多數 web 應用程式都為使用者提供了重設密碼的功能。相較於強迫你在每個應用中都要重新實現一遍此功能,Laravel 提供了便捷的方法來發送密碼提醒以及執行密碼重置。

{note} 在使用 Laravel 的密碼重設功能之前,你的使用者模型必須使用
Illuminate\Notifications\Notifiable
trait。 #########################

資料庫注意事項

首先,驗證你的 App\User 模型是否實作了 Illuminate\Contracts\Auth\CanResetPassword 契約。當然,框架中包含的 App\User 模型已經實現了該接口,並且使用了 Illuminate\Auth\Passwords\CanResetPassword trait t 來包含實現該接口所需的方法。

產生重設令牌的資料表遷移

接下來,必須建立一張資料表來儲存密碼重設令牌。此資料表的遷移已包含在 Laravel 應用的 database/migrations 目錄中。所以,你需要做的只是執行資料庫遷移指令:

php artisan migrate

#路由

Laravel 已在 Auth\ForgotPasswordControllerAuth\ResetPasswordController 類別中包含了發送密碼重設連結電子郵件和重設使用者密碼的邏輯。所有執行密碼重設所需的路由可以使用Artisan 指令make:auth 來產生:

php artisan make:auth

視圖

當執行make:auth 指令時,Laravel 會產生重設密碼所需的所有視圖。這些檢視位於  resources/views/auth/passwords 目錄中。你可以根據你應用的需要隨意修改這些視圖。

重設密碼後

#一旦你定義了重置使用者密碼的路由和視圖,你可以在瀏覽器中存取/password/reset 這個路由來重置密碼。框架中的  ForgotPasswordController 已包含傳送密碼重設連結電子郵件的邏輯,同時 ResetPasswordController 包含了重設使用者密碼的邏輯。

在重設密碼後,使用者將會自動登入並重新導向至 /home。你可以透過在ResetPasswordController 中定義一個redirectTo 屬性來自訂密碼重設後重定向的位置:

protected $redirectTo = '/dashboard';

{note} 預設情況下,密碼重置令牌會在一小時後過期。你可以透過 config/auth.php 檔案中的密碼重設  expire 選項對此進行修改。

自訂

#自訂身份驗證守護器

在你的auth.php 設定檔中,你可以設定多個「看守器」,可以用來定義多個使用者表的身份驗證行為。你可以自訂框架中的 ResetPasswordController ,透過重寫該控制器中的  guard  方法來使用你所選擇的看守器。這個方法應當傳回一個看守器實例:

use Illuminate\Support\Facades\Auth;protected function guard(){ 
   return Auth::guard('guard-name');
 }

自訂密碼代理

在你的auth.php 設定檔中,你可以設定多個密碼「代理」,可以用來重設多個使用者表上的密碼。你可以自訂框架中的ForgotPasswordControllerResetPasswordController , 透過重寫控制器中的 broker 方法來使用你所選擇的代理:

use Illuminate\Support\Facades\Password;
/**
 * 获取在密码重置期间使用的代理。
 *
 * @return PasswordBroker
 */
 protected function broker(){  
   return Password::broker('name');
 }

自訂密碼重設郵件

你可以輕鬆修改用於傳送密碼重設連結給使用者的通知類別。首先,重寫  User 模型中的 sendPasswordResetNotification 方法。在這個方法中,你可以使用任何你所選擇的通知類別來發送通知。此方法接收的第一個參數是密碼重設令牌  $token

/**
 * 发送密码重置通知。
 *
 * @param  string  $token
 * @return void
 */
 public function sendPasswordResetNotification($token){ 
    $this->notify(new ResetPasswordNotification($token));
 }
本篇文章首發在 LearnKu.com 網站上。