* * * * *
[TOC]
## 簡介
> {tip}?**想要快速上手此功能?**?首先在 Laravel 應用下運行?`php artisan make:auth`?命令,然后使用瀏覽器打開?`http://your-app.dev/register`?,或者任意一個在應用中分配的 URL 。這個命令將會生成包括密碼重置在內的整個認證系統。
大部分的 web 應用都為用戶提供重置密碼的功能。Laravel 提供了一種非常方便的方法用于發送密碼重置郵件來完成密碼重置,而不需要在每個應用中重新實現。
> {note} 在使用 Laravel 密碼重置功能之前, 你必須?`use`?這個?`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
~~~
## 視圖
和路由一樣Laravel 在執行?`make:auth`?命令時同時會在?`resources/views/auth/passwords`?生成密碼重置必要視圖文件。當然,你可以隨意對它們進行修改。
## 重置密碼后
一旦您定義了重置用戶密碼的路由和視圖后,您可以在瀏覽器中訪問?`/password/reset`?。 框架自帶的?`ForgotPasswordController`?已經包含了發送密碼重置鏈接郵件的邏輯,?`ResetPasswordController`?包含了重置用戶密碼的邏輯。
在密碼重置之后,用戶將會自動登錄并重定向到?`/home`?。你可以定義?`ResetPasswordController`?控制器的?`redirectTo`?屬性來定制密碼重置成功后的自定義跳轉鏈接:
~~~
protected $redirectTo = '/dashboard';
~~~
> {note} 默認情況下, 密碼重置令牌在一小時內有效。你可以通過修改?`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`?中, 可以配置多個密碼 「brokers」 , 它可以用于多個用戶表重置密碼。你可以通過重寫`ForgotPasswordController`?和?`ResetPasswordController`?控制器的?`broker`?方法來實現你的自定義?`broker`:
~~~
use Illuminate\Support\Facades\Password;
/**
* 獲取在密碼重置期間使用的 broker
*
* @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
- HTTP層
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- Session
- 表單驗證
- 前端
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全
- 用戶認證
- Passport OAuth 認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 錯誤與日志
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- 序列化
- 測試
- 快速入門
- HTTP 測試
- 瀏覽器測試 Dusk
- 數據庫測試
- 測試模擬器
- 官方擴展包
- Cashier 交易工具包
- Envoy 部署工具
- Scout 全文搜索
- Socialite 社會化登錄