想要快速實現該功能?只需要在新安裝的Laravel 應用程式下執行php artisan make:auth (如果你已經執行過此指令,可忽略),然後在瀏覽器中造訪http://your-app.dev/register 或其他指派給應用的URL,該命令會產生使用者登入註冊所需的所有東西,包括密碼重設!
大多數Web 應用程式都提供了為使用者重置密碼的功能,Laravel 也不例外,Laravel 提供了用於發送密碼重置連結及實現密碼重置邏輯的便捷方法,而不需要你在每個應用中自己重複實作。
附註:在使用 Laravel 提供的密碼重設功能之前, User 模型必須使用了 Illuminate\Notifications\Notifiable trait。
資料庫相關
開始之前,先驗證 App\User 模型實作了 Illuminate\Contracts\Auth\CanResetPassword 契約。當然,Laravel 自帶的 App\User 模型已經實作了該接口,並使用 Illuminate\Auth\Passwords\CanResetPassword trait 來包含實作該介面所需的方法。
產生重置令牌表遷移
接下來,用來儲存密碼重設令牌的表必須被創建,Laravel 已經自帶了這張表的遷移,就存放在database/migrations 目錄。所以,你所要做的僅僅是運行遷移:
php artisan migrate
這張表就是password_resets :
路由
Laravel 自帶了Auth\ForgotPasswordController 和Auth\ResetPasswordController 控制器(這兩個控制器類別會透過php artisan make:auth 指令自動產生),分別用於傳送密碼重設連結郵件和重設使用者密碼功能。重設密碼所需的路由都已經透過make:auth 指令自動產生了:
php artisan make:auth
對應路由定義在Illuminate\Routing\Router 的auth 方法中:
檢視
和路由一樣,重設密碼所需的檢視檔案也透過make:auth 指令一併產生了,這些檢視檔位於
resources/views/auth/passwords 目錄下,你可以依照所需對產生的檔案進行對應修改。
重設密碼
定義好重置使用者密碼路由和檢視後,只需要在瀏覽器中透過 /password/reset 存取這個入口路由。框架內附的ForgotPasswordController 已經包含了發送密碼重設連結郵件的邏輯, ResetPasswordController 包含了重設使用者密碼的邏輯:
輸入註冊信箱,點選傳送密碼重置鏈接,就會發送密碼重置鏈接到該郵箱:
#打開郵箱會收到這樣一封重置密碼郵件:
點選重設密碼按鈕,即可進入重設密碼頁:
填寫表單提交後即可重設密碼。
密碼被重設後,使用者將會自動登入應用程式並重定向到 /home 。你可以透過定義ResetPasswordController 的redirectTo 屬性來自訂密碼重設成功後的跳轉連結:
protected $redirectTo = '/dashboard';
## 註:預設情況下,密碼重設令牌一小時內有效,你可以透過修改config/auth.php 檔案中的選項expire 來改變有效時間。
自訂
自訂認證Guard
在設定檔auth.php 中,可以設定多個“guards”,以便用於實現基於多用戶表的獨立認證,你可以透過重寫內建的ResetPasswordController 控制器上的guard 方法來使用你所選擇的guard,該方法將會傳回一個guard 實例:
use Illuminate\Support\Facades\Auth; protected function guard() { return Auth::guard('guard-name'); }
自訂密碼broker
在設定檔auth.php 中,可以設定多個密碼,以便用於重置多個使用者表的密碼broker,同樣,可以透過重寫自帶的ForgotPasswordController 和ResetPasswordController 控制器中的broker 方法來使用你所選擇的broker:
use Illuminate\Support\Facades\Password;
/** * 获取密码重置期间所使用的broker. * * @return PasswordBroker * @translator laravelacademy.org */ protected function broker() { return Password::broker('name'); }
自訂密碼重設郵件
你可以很方便地編輯發送密碼重設連結給用戶的通知類別實作自訂密碼重設郵件,要實現此功能,需要重寫User 模型上的sendPasswordResetNotification 方法,在這個方法中,可以使用任何你所喜歡的通知類別發送通知,該方法接收的第一個參數是密碼重設$token :
/** * 发送密码重置通知. * * @param string $token * @return void */ public function sendPasswordResetNotification($token) { $this->notify(new ResetPasswordNotification($token)); }
相關推薦:
以上是Laravel密碼重置功能的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!