重置密碼
重置密碼
重置密碼
簡介
{tip} 想要快速上手? 只需要在新建的 Laravel 應(yīng)用中運行
php artisan make:auth
,然后在瀏覽器中打開http://your-app.test/register
或者給你的應(yīng)用分配任意一個 URL。 這個命令將會負責(zé)搭建起整個身份驗證系統(tǒng),包括重置密碼!
大多數(shù) web 應(yīng)用都為用戶提供了重置密碼的功能。相較于強迫你在每個應(yīng)用中都要重新實現(xiàn)一遍此功能,Laravel 提供了便捷的方法來發(fā)送密碼提醒以及執(zhí)行密碼重置。
{note} 在使用 Laravel 的密碼重置功能之前,你的用戶模型必須使用
Illuminate\Notifications\Notifiable
trait。
數(shù)據(jù)庫注意事項
首先,驗證你的 App\User
模型是否實現(xiàn)了 Illuminate\Contracts\Auth\CanResetPassword
契約。當(dāng)然,框架中包含的 App\User
模型已經(jīng)實現(xiàn)了該接口,并且使用了 Illuminate\Auth\Passwords\CanResetPassword
trait t 來包含實現(xiàn)該接口所需的方法。
生成重置令牌的表遷移
接下來,必須創(chuàng)建一張數(shù)據(jù)表來存儲密碼重置令牌。該數(shù)據(jù)表的遷移已包含在 Laravel 應(yīng)用的 database/migrations
目錄中。 所以,你需要做的只是執(zhí)行數(shù)據(jù)庫遷移命令:
php artisan migrate
路由
Laravel 已在 Auth\ForgotPasswordController
和 Auth\ResetPasswordController
類中包含了發(fā)送密碼重置鏈接電子郵件和重置用戶密碼的邏輯。所有執(zhí)行密碼重置所需的路由可以使用 Artisan 命令 make:auth
來生成:
php artisan make:auth
視圖
當(dāng)執(zhí)行 make:auth
命令時,Laravel 會生成重置密碼所需的所有視圖。 這些視圖位于 resources/views/auth/passwords
目錄中。你可以根據(jù)你應(yīng)用的需要隨意修改這些視圖。
重置密碼后
一旦你定義了重置用戶密碼的路由和視圖,你可以在瀏覽器中訪問 /password/reset
這個路由來重置密碼??蚣苤械? ForgotPasswordController
已包含發(fā)送密碼重置鏈接電子郵件的邏輯,同時 ResetPasswordController
包含了重置用戶密碼的邏輯。
在重置密碼后,用戶將會自動登錄并重定向到 /home
。 你可以通過在 ResetPasswordController
中定義一個 redirectTo
屬性來自定義密碼重置后重定向的位置:
protected $redirectTo = '/dashboard';
{note} 默認情況下,密碼重置令牌會在一小時后過期。你可以通過
config/auth.php
文件中的密碼重置expire
選項對此進行修改。
自定義
自定義身份驗證看守器
在你的 auth.php
配置文件中,你可以配置多個「看守器」,可以用來定義多個用戶表的身份驗證行為。你可以自定義框架中的 ResetPasswordController
,通過重寫該控制器中的 guard
方法來使用你所選擇的看守器。這個方法應(yīng)當(dāng)返回一個看守器實例:
use Illuminate\Support\Facades\Auth;protected function guard(){ return Auth::guard('guard-name'); }
自定義密碼代理
在你的 auth.php
配置文件中,你可以配置多個密碼「代理」,可以用來重置多個用戶表上的密碼。你可以自定義框架中的 ForgotPasswordController
和 ResetPasswordController
, 通過重寫控制器中的 broker
方法來使用你所選擇的代理:
use Illuminate\Support\Facades\Password; /** * 獲取在密碼重置期間使用的代理。 * * @return PasswordBroker */ protected function broker(){ return Password::broker('name'); }
自定義密碼重置郵件
你可以輕松地修改用于向用戶發(fā)送密碼重置鏈接的通知類。首先,重寫 User
模型中的 sendPasswordResetNotification
方法。 在此方法中,你可以使用任何你所選擇的通知類來發(fā)送通知。該方法接收的第一個參數(shù)是密碼重置令牌 $token
:
/** * 發(fā)送密碼重置通知。 * * @param string $token * @return void */ public function sendPasswordResetNotification($token){ $this->notify(new ResetPasswordNotification($token)); }