# 重置密碼
- [重置密碼說明](#introduction)
- [數據庫注意事項](#resetting-database)
- [路由](#resetting-routing)
- [視圖](#resetting-views)
- [重置密碼后](#after-resetting-passwords)
- [密碼自定義](#password-customization)
<a name="introduction"></a>
## 重置密碼說明
> {提示} **想要快速上手此功能?** 首先在 Laravel 應用下運行 `php artisan make:auth` 命令,然后使用瀏覽器打開 `http://your-app.dev/register` ,或者任意一個在應用中分配的 URL 。這個命令將會生成包括密碼重置在內的整個認證系統。
大部分的 web 應用都為用戶提供重置密碼的功能。Laravel 提供了一種方便的方法用于發送密碼提示及執行密碼重置,而不需要在每個應用中重新實現。
> {注意} 在使用 Laravel 密碼重置功能之前, 你必須 `use` 這個 `Illuminate\Notifications\Notifiable` `trait` 。
<a name="resetting-database"></a>
## 數據庫注意事項
開始之前,請先確認 `App\User` 模型是否實現了 `Illuminate\Contracts\Auth\CanResetPassword` `contract` 。當然,在 Laravel 框架中 `App\User` 模型已經實現了這個接口,并使用 `Illuminate\Contracts\Auth\CanResetPassword` `trait` 來實現該接口包含的方法。
#### 生成重置令牌表遷移
接下來,用來存儲密碼重置令牌的表必須被創建。 Laravel 已經自帶了這張表的遷移,就存放在 `database/migrations` 目錄,因此,你只需要運行數據庫遷移命令:
php artisan migrate
<a name="resetting-routing"></a>
## 路由
Laravel 在 `Auth\ForgotPasswordController` 和 `Auth\ResetPasswordController` 兩個類中包含了電子郵件密碼重置鏈接和重置用戶密碼的必要邏輯。所有需要密碼重置的路由可以使用 `make:auth` Artisa 命令生成:
php artisan make:auth
<a name="resetting-views"></a>
## 視圖
和路由一樣, Laravel 在執行 `make:auth` 命令時將會成生成密碼重置時的必要視圖文件。這些視圖文件存放在 `resources/views/auth/passwords` 目錄。你可以在應用中對生成的文件進行相應修改。
<a name="after-resetting-passwords"></a>
## 重置密碼后
定義好重置用戶密碼的路由和視圖后,你可以簡單的在瀏覽器中訪問路由 `/password/reset` 。框架自帶的 `ForgotPasswordController` 已經包含了發送密碼重置鏈接郵件的邏輯,`ResetPasswordController` 包含了重置用戶密碼的邏輯。
在密碼重置之后,用戶將會自動登錄并重定向到 `/home` 。你可以定義 `ResetPasswordController` 控制器的 `redirectTo` 屬性來定制密碼重置成功后的自定義跳轉鏈接:
protected $redirectTo = '/dashboard';
> {注意} 默認情況下, 密碼重置令牌在一小時內有效。你可以通過修改 `config/auth.php` 的 `expire` 選項來修改此項配置。
<a name="password-customization"></a>
## 密碼自定義
#### 自定義認證 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` :
/**
* Get the broker to be used during password reset.
*
* @return PasswordBroker
*/
protected function broker()
{
return Password::broker('name');
}
#### 自定義重置郵箱
你可以方便的修改通知類用以給用戶發送密碼重置鏈接。在開始之前, 重寫`User` 模型中 `sendPasswordResetNotification` 方法。在這個方法中,你可以使用你選擇的任意通知類發送通知。密碼重置令牌 `$token` 是這個方法的接收第一個參數:
/**
* Send the password reset notification.
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPasswordNotification($token));
}
- 說明
- 翻譯說明
- 發行說明
- 升級說明
- 貢獻導引
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- 錯誤與日志
- 開發環境
- HomeStead
- Valet
- 核心概念
- 服務容器
- 服務提供者
- 門面(facades)
- contracts
- HTTP層
- 路由
- 中間件
- CSRF保護
- 控制器
- 請求
- 響應
- Session
- 表單驗證
- 視圖與模板
- 視圖
- Blade模板
- 本地化
- Javascript與CSS
- 入門指南
- laravel-elixir
- 安全
- 用戶認證
- 用戶授權
- 重置密碼
- API授權
- 加密解密
- 哈希
- 綜合話題
- 廣播系統
- 緩存系統
- 事件系統
- 文件存儲
- 郵件發送
- 消息通知
- 隊列
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- redis
- Eloquent ORM
- 快速入門
- 模型關聯
- Eloquent集合
- 修改器
- 序列化
- Artisan控制臺
- Artisan 命令行
- 任務調度
- 測試
- 快速入門
- 應用程序測試
- 數據庫測試
- 模擬器
- 官方擴展包
- Cashier交易包
- Envoy 部署工具
- Passport OAuth 認證
- Scout 全文搜索
- Socialite 社交化登錄
- 附錄
- 集合
- 輔助函數
- 擴展包開發
- 交流說明