laravel 是一種流行的 php 框架,它提供了一個強大的開發環境,可以讓您更容易地構建 web 應用程序。其中一個重要的特性是 laravel 自帶的身份驗證系統,可以讓您快速實現用戶認證,包括登錄和注冊。在本文中,我們將演示如何使用 laravel 實現登錄注冊。
部署環境
在開始實現身份驗證之前,我們需要確保 Laravel 環境已經配置好并且數據庫連接已經配置。如果您還沒有安裝 Laravel,可以參考官方文檔中的安裝指南。在 Laravel 應用程序中,我們使用 Artisan 命令行工具創建必要的文件和目錄結構。在命令行中,我們可以使用以下命令創建新的 Laravel 應用程序:
composer create-project –prefer-dist laravel/laravel blog
創建之后,導航到應用程序的根目錄,運行以下命令生成應用程序密鑰:
php artisan key:generate
注冊路由
在 Laravel 中,路由是連接 URI 和對應控制器方法的橋梁。要注冊我們的身份驗證路由,我們需要更新 routes/web.php 文件。在這個文件中,我們定義了應用程序的路由,其中包括登錄和注冊路由。
首先,我們需要定義發送 POST 請求到 /register 的路由,并將其綁定到 RegisterController 的 register() 方法。這將呈現一個注冊表單,用戶可以填寫其用戶名和密碼。
Route::post(‘/register’, ‘AuthRegisterController@register’)->name(‘register’);
接下來,我們需要定義發送 POST 請求到 /login 的路由,并將其綁定到 LoginController 的login() 方法。這將呈現一個登錄表單,用戶可以填寫登錄名和密碼。如果用戶沒有有效的憑據進行驗證,則應用程序會重定向到登錄表單。
Route::post(‘/login’, ‘AuthLoginController@login’)->name(‘login’);
最后,我們需要定義所有受保護的路由。在 Laravel 中,我們可以使用 auth 中間件來確保用戶已經通過身份驗證。這個中間件將自動重定向未經驗證的用戶到 /login 路由。
Route::middleware([‘auth’])->group(function () {
// your protected routes go here
});
處理控制器
我們已經定義了必要的路由,現在需要在控制器中處理它們。在 Laravel 中,控制器是處理特定 HTTP 請求的類,控制器中的方法返回 HTTP 響應。在應用程序中,我們需要創建兩個控制器用于處理注冊和登錄請求。
在 app/Http/Controllers/Auth 目錄下,創建 LoginController.php 和 RegisterController.php 兩個文件,這兩個文件是 Laravel 自帶的控制器類。在這些控制器中,我們需要覆蓋 Laravel 的默認方法,為登錄和注冊請求提供自定義的功能。
登錄控制器
我們首先來看 LoginController.php 控制器。此控制器包含兩個方法:showLoginForm() 和 login()。
showLoginForm() 方法返回登錄表單視圖(resources/views/auth/login.blade.php),該視圖包含一個表單,用戶可以輸入登錄名和密碼。這個方法是由 Laravel 所提供的。
public function showLoginForm()
{
return view('auth.login');
}
login() 方法是真正實現登錄邏輯的地方。這個方法接收一個 IlluminateHttpRequest 實例,并使用該實例的 validate() 方法驗證用戶輸入。如果表單驗證成功,Laravel 將自動搜索使用給定登錄名和密碼的用戶,并將其登錄到應用程序中。
public function login(Request $request)
{
$request->validate([ 'email' => 'required|string|email', 'password' => 'required|string', 'remember' => 'boolean' ]); $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials, $request->remember)) { return redirect()->intended('dashboard'); } return redirect()->back()->withInput($request->only('email', 'remember'));
}
注意,attempt() 方法將根據給定的憑據來自動檢查密碼是否正確。如果密碼不正確,則會返回 false。
如果用戶已經成功驗證,并且他們之前請求的 URL 被存儲起來(通常指被 auth 中間件阻止的URL),我們可以使用 Laravel 輔助函數 intended() 來將其重定向到該 URL。如果未存儲任何 URL,則重定向到前端控件臺(/dashboard)。
注冊控制器
接下來我們來看 RegisterController.php 控制器。除了 Laravel 的默認方法之外,我們還需要實現 register() 方法。
register() 方法非常類似于 login() 方法。它接收一個 IlluminateHttpRequest 實例,并使用該實例的 validate() 方法驗證用戶輸入。如果表單驗證成功,Laravel 將創建一個新用戶,并將其保存到數據庫中。然后,我們可以使用 Laravel 的默認行為將用戶登錄到應用程序中。
public function register(Request $request)
{
$request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:6|confirmed', ]); $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); Auth::login($user); return redirect()->intended('dashboard');
}
在注冊控制器中我們可以使用 Hash 輔助函數來對密碼進行加密。如果密碼驗證成功,我們將創建新用戶并將其登錄到應用程序中。
視圖層
現在我們已經定義了必要的路由和控制器,接下來需要創建身份驗證視圖。
在 resources/views/auth 目錄中,我們可以創建 login.blade.php 和 register.blade.php 兩個視圖文件。這些視圖包含登錄和注冊表單,使用了一些 Laravel 幫助程序,可以處理表單驗證并顯示錯誤消息。
登錄視圖
在 login.blade.php 文件中,我們可以使用 Laravel 的 Form 輔助函數創建登錄表單。這個函數會自動為表單添加 CSRF 令牌,并為輸入字段編寫 HTML 標記。
注意,我們使用了 Blade 模板引擎的 @csrf 和 @if 語句來生成必要的 CSRF 令牌并顯示驗證錯誤。
注冊視圖
在 register.blade.php 文件中,我們可以使用 Laravel 的 Form 幫助器創建注冊表單。這個函數自動為表單添加 CSRF 令牌,并為輸入字段編寫 HTML 標記。
注意,我們使用了 Blade 模板引擎的 @csrf 和 @if 語句來生成必要的 CSRF 令牌并顯示驗證錯誤消息。
結論
通過 Laravel 可以快速、方便、安全地實現 Web 應用程序的登錄和注冊身份驗證功能,從而保護您的應用程序免受未授權的訪問。在本文中,我們介紹了 Laravel 的身份驗證系統并實現了注冊和登錄。現在,您可以使用這些基礎知識構建更完整的用戶身份驗證系統,或將其集成到您的現有應用程序中。