* * * * *
[TOC]
## 介紹
> {tip}?**想要快速上手?**?只需在一個新的 Laravel 應用中運行?`php artisan make:auth`?命令,然后在瀏覽器中訪問?`http://your-app.dev/register`?或分配給應用的任何別的 URL。這條命令將搭建起整個身份驗證系統,包括重置密碼!
大多數 Web 應用都為用戶提供了重置密碼的功能。相比強迫你在每個應用中都要重實現一遍此功能,Laravel 提供了便捷的方法來發送密碼提醒和執行密碼重置。
> {note} 在使用 Laravel 的密碼重置功能之前,你的用戶模型必須使用?`Illuminate\Notifications\Notifiable`trait。
## 數據庫注意事項
首先,請核實你的?`App\User`?模型是否實現了?`Illuminate\Contracts\Auth\CanResetPassword`?契約。當然,Laravel 框架中包含的?`App\User`?模型已經實現了該接口,并使用?`Illuminate\Auth\Passwords\CanResetPassword`trait 來包含實現該接口所需的方法。
#### 生成重置令牌的表遷移
接下來,必須創建一個數據表來存儲密碼重置令牌。該數據表的遷移已包含在 Laravel 應用的?`database/migrations`目錄中。因此,你需要做的只是運行數據庫遷移命令:
~~~
php artisan migrate
~~~
## 路由
Laravel 已在?`Auth\ForgotPasswordController`?和?`Auth\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`?配置文件中,你可以配置多個密碼「代理」,用來重置多個用戶表上的密碼。你可以通過重寫?`ForgotPasswordController`?和?`ResetPasswordController`?控制器的?`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));
}
~~~
- 前言
- 翻譯說明
- 發行說明
- 升級指南
- 貢獻導引
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- Homestead
- Valet
- 部署
- 核心架構
- 請求周期
- 服務容器
- 服務提供者
- Facades
- Contracts
- 基礎功能
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- URL
- Session
- 表單驗證
- 錯誤
- 日志
- 前端開發
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全相關
- 用戶認證
- Passport OAuth 認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- API 資源
- 序列化
- 測試相關
- 快速入門
- HTTP 測試
- 瀏覽器測試 Dusk
- 數據庫測試
- 測試模擬器
- 官方擴展包
- Cashier 交易工具包
- Envoy 部署工具
- Horizon
- Scout 全文搜索
- Socialite 社會化登錄