首頁 >後端開發 >php教程 >PHP中Laravel密碼重置的實現

PHP中Laravel密碼重置的實現

php中世界最好的语言
php中世界最好的语言原創
2018-03-24 15:40:261757瀏覽

這次帶給大家PHP中Laravel密碼重置的實現,PHP中Laravel密碼重置的注意事項有哪些,下面就是實戰案例,一起來看一下。

簡介

想要快速實現該功能?只需要在新安裝的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\ForgotPasswordControllerAuth\ResetPasswordController 控制器(這兩個控制器類別會透過php artisan make:auth 指令自動產生),分別用來傳送密碼重設連結郵件和重設使用者密碼功能。重置密碼所需的路由都已經透過make:auth 指令自動產生了:

php artisan make:auth

對應

路由定義#在Illuminate\Routing\Router 的auth 方法中:

 

檢視

與路由一樣,重置密碼所需的檢視檔案也透過make:auth 指令一併產生了,這些檢視檔案位於

resource<a href="http://www.php.cn/wiki/61.html" target="_blank">s/views/auth/passwords </a>目錄下,你可以按照所需對生成的文件進行相應修改。

重設密碼

定義好重置使用者密碼路由和檢視後,只需要在瀏覽器中透過/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));
}

#相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

php自訂二維數組排序函數array

PHP伺服器端的API以及介面開發詳解

以上是PHP中Laravel密碼重置的實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn