先來看看官方網站怎摸說吧!
Many web applications provide a way for their users to authenticate with the application and "login". Implementing this feature in web applications can be a complex and potentially risky endeavor. For this reason, Laravel strives to give you the tools you need to implement authentication quickly, securely, and easily.
At its core, Laravel's authentication facilities are made up of "guards" and "providers". Guards define how users are authenticated for each request. For example, Laravel ships with a
session
guard which maintains state using session storage and cookies.Providers define how users are retrieved from your persistent storage. Laravel ships with support for retrieving users using Eloquent and the database query builder. However, you are free to define additional providers as needed for your application.
Your application's authentication configuration file is located at
config/auth.php
. This file contains several well-documented options for tweaking the behavior of Laravel's authentication services.
我理解的意思是在說
很多網頁應用程式都會讓使用者進行身份驗證和登錄。但是要實現這個功能其實挺複雜的,也有一定的風險。因此,Laravel 就提供了兩個認證系統「guards」和「providers」,讓我們可以快速、安全、簡單地做這件事情,我們可以在 config/auth.php
找到應用程式的認證配置文件
session
guard」,它通過 session storage 和 Cookie 來保持使用者的狀態。我們來看看要如何使用 Authentication
首先,我們需要安裝一個 Laravel 應用程式的啟動套件。有兩個可以選擇唷
安裝好認證啟動套件後,使用者可以進行註冊和登錄。這時,在處理使用者的請求時,可以使用 Auth 的 user
方法來獲取當前已驗證的使用者,這樣就能方便地與該用戶進行互動,滿足後續需求。
use Illuminate\Support\Facades\Auth;
// 獲取當前已驗證的用戶
$user = Auth::user();
// 獲取當前已驗證用戶的 ID
$id = Auth::id();
當使用者登錄後,我們可以在控制器中通過加入 Illuminate\Http\Request
物件來獲取已驗證的使用者。這樣,我們就能使用請求的 user
方法輕鬆獲得當前使用者的訊息。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class FlightController extends Controller
{
/**
* 更新現有航班的信息
*/
public function update(Request $request): RedirectResponse
{
$user = $request->user();
// ...
return redirect('/flights');
}
}
我們要如何知道發送請求的使用者是否已被驗證,可以使用 Auth 的 check
方法。這個方法若是返回 true
,就表示使用者已登錄:
(通常會再使用 middleware 來確保使用者在進入某些路由或控制器之前已經登錄。)
use Illuminate\Support\Facades\Auth;
if (Auth::check()) {
// 用戶已登錄
}
使用 Route middleware 來限制已驗證的使用者才能進入特定的路由。Laravel 提供了 auth middleware,這樣我們只需將其附加到路由定義上:
use Illuminate\Auth\Middleware\Authenticate
Route::get('/flights', function () {
// 只有已驗證的用戶可以訪問這個路由
})->middleware('auth');
當 auth middleware 檢測到未驗證的使用者時,會將其倒回到登錄頁面。我們可以通過應用 bootstrap/app.php
文件 redirectGuestsTo
方法的來修改這個行為:
use Illuminate\Http\Request;
->withMiddleware(function (Middleware $middleware) {
$middleware->redirectGuestsTo('/login');
// 使用 closure
$middleware->redirectGuestsTo(fn (Request $request) => route('login'));
})
在把 auth middleware 附加到路由時,我們可以指定使用哪個「guard」來驗證用戶。
要注意的是!這個 guard 的名稱要和 auth.php
配置文件中的 guards 陣列裡的 keys 對應。這樣,系統就知道用哪種方式來檢查使用者的身份
Route::get('/flights', function () {
// 只有已驗證的使用者可以進入這個路由
})->middleware('auth:admin');
如果使用 Laravel Breeze 或 Laravel Jetstream,登錄嘗試會自動受到 login attempts 。一般預設的情況下,如果使用者在幾次嘗試後未能提供正確的憑據,他們將在一分鐘內無法登錄。這個限制是針對使用者的使用者名稱、電子郵件地址和 IP 地址來進行的。
使用 Laravel Authentication 能輕鬆讓使用者進行身份驗證:
參考資料:
踏著身心靈的塔羅腳步,轉向技術與邏輯的工程師之路,就藉由塔羅日抽來紀錄今日的學習與生活吧!
錢幣三:好唷!看到錢幣牌總還要跟自己說,今天的自己也是很棒有在努力呢~這張牌感覺是在說可以找人合作,那我就當作是在提醒我,鐵人賽不只是獨自完成,也是可以找人討論,讓自己的理解可以更透徹~
“We love our girl, every messy beautiful part of her.”
我們愛你,包括所有凌亂不堪、美麗的部份
— 腦筋急轉彎2