Laravel是一款流行的PHP Web開發(fā)框架,它提供了許多強(qiáng)大的功能和工具來(lái)簡(jiǎn)化Web應(yīng)用程序的開發(fā)和維護(hù)。Laravel Sanctum是Laravel框架的一個(gè)插件,它提供了API身份驗(yàn)證和授權(quán)的功能,可以輕松地保護(hù)您的API端點(diǎn)免受未經(jīng)授權(quán)的訪問(wèn)。
在本文中,我們將學(xué)習(xí)如何使用Laravel Sanctum實(shí)現(xiàn)API身份驗(yàn)證和授權(quán)。
一、什么是Laravel Sanctum?
Laravel Sanctum是一個(gè)輕量級(jí)的身份驗(yàn)證包,它提供了簡(jiǎn)單但強(qiáng)大的API身份驗(yàn)證和授權(quán)功能。它基于Laravel中間件和HTTP認(rèn)證,允許我們安全地將身份驗(yàn)證令牌附加到API請(qǐng)求中。
Laravel Sanctum支持兩種身份驗(yàn)證方式:基于Cookie的身份驗(yàn)證和基于Token的身份驗(yàn)證。基于Cookie的身份驗(yàn)證使用Laravel中間件來(lái)驗(yàn)證請(qǐng)求中是否存在有效的認(rèn)證Cookie。另一種驗(yàn)證類Header中的Token并檢查其是否有效。
二、安裝Laravel Sanctum
在開始之前,我們需要先安裝Laravel Sanctum。使用composer包管理器可以輕松地安裝Laravel Sanctum:
composer require laravel/sanctum
登錄后復(fù)制
當(dāng)然了,也可以通過(guò)在composer.json文件中添加以下要求來(lái)手動(dòng)安裝:
{ "require": { "laravel/sanctum": "^2.9" } }
登錄后復(fù)制
完成后,運(yùn)行以下命令來(lái)發(fā)布Laravel Sanctum配置文件和數(shù)據(jù)庫(kù)遷移文件:
php artisan vendor:publish --tag=sanctum-config php artisan vendor:publish --tag=sanctum-migrations php artisan migrate
登錄后復(fù)制
三、配置Laravel Sanctum
- 首先,需要添加laravel / sanctum中間件到您的應(yīng)用程序的HTTP內(nèi)核中。
修改app/Http/kernel.php文件,添加Sanctum中間件:
// app/Http/Kernel.php protected $middleware = [ // ... LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful::class, ]; protected $middlewareGroups = [ 'web' => [ // ... ], 'api' => [ LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful::class, 'throttle:api', IlluminateRoutingMiddlewareSubstituteBindings::class, ], ];
登錄后復(fù)制
這將確保在每個(gè)請(qǐng)求期間都可以使用Sanctum的基于Cookie的身份驗(yàn)證。
- 接下來(lái),需要配置auth配置文件。
打開config/auth.php文件,找到defaults和guards并將它們配置為使用sanctum。
// config/auth.php 'defaults' => [ 'guard' => 'api', 'passwords' => 'users', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'sanctum', 'provider' => 'users', 'hash' => false, ], ],
登錄后復(fù)制
這將允許我們使用Sanctum進(jìn)行基于Token的身份驗(yàn)證。
- 添加Sanctum提供者。
如果您使用的是新版本的Laravel,則不需要添加提供者。如果您使用的是舊版本,請(qǐng)打開config/app.php文件并在providers數(shù)組中添加以下行:
LaravelSanctumSanctumServiceProvider::class,
登錄后復(fù)制
四、創(chuàng)建授權(quán)令牌
現(xiàn)在,我們已經(jīng)配置了Laravel Sanctum,接下來(lái)我們將了解如何使用Sanctum來(lái)創(chuàng)建授權(quán)令牌。
- 在用戶登錄后,在users表中為該用戶創(chuàng)建一個(gè)API令牌。
public function createToken(Request $request) { $user = Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password')]); if($user) { $token = $user->createToken('API Token')->plainTextToken; return response()->json([ 'token' => $token, ]); } else { return response()->json([ 'message' => 'Invalid credentials', ], 401); } }
登錄后復(fù)制
- 創(chuàng)建令牌后,您可以將其添加到每個(gè)請(qǐng)求的Authorization標(biāo)頭中。可以在axios請(qǐng)求中如下設(shè)置:
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
登錄后復(fù)制
五、實(shí)現(xiàn)API身份驗(yàn)證和授權(quán)
在創(chuàng)建了授權(quán)令牌后,我們可以使用Sanctum來(lái)保護(hù)API端點(diǎn)免受未經(jīng)授權(quán)的訪問(wèn)。我們可以使用Laravel路由中間件來(lái)檢查認(rèn)證令牌并拒絕未經(jīng)授權(quán)的訪問(wèn)。
- 首先,在api.php文件中定義受保護(hù)的API路由。
// routes/api.php Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); });
登錄后復(fù)制
此路由將使用Sanctum auth中間件保護(hù)。
- 接下來(lái),訪問(wèn)受保護(hù)的路由并查看結(jié)果。可以通過(guò)以下命令進(jìn)行測(cè)試:
php artisan serve
登錄后復(fù)制
現(xiàn)在,可以訪問(wèn) /api/user 路由以查看已登錄的用戶的詳細(xì)信息。現(xiàn)在,如果沒有授權(quán)標(biāo)頭,將不會(huì)能夠訪問(wèn)它并返回401未經(jīng)授權(quán)的HTTP狀態(tài)碼。
六、結(jié)尾
Laravel Sanctum是一個(gè)強(qiáng)大且易于使用的身份驗(yàn)證和授權(quán)解決方案,可以在Laravel Web應(yīng)用程序和Web API中輕松實(shí)現(xiàn)身份驗(yàn)證和授權(quán)。它可以輕松地保護(hù)您的API端點(diǎn)免受未經(jīng)授權(quán)的訪問(wèn),并使您可以輕松地控制哪些用戶可以訪問(wèn)哪些API端點(diǎn)。在這篇文章中,我們學(xué)習(xí)了如何安裝和配置Laravel Sanctum,并了解了如何使用它來(lái)創(chuàng)建授權(quán)令牌和實(shí)現(xiàn)API身份驗(yàn)證和授權(quán)。
以上就是Laravel開發(fā):如何使用Laravel Sanctum實(shí)現(xiàn)API身份驗(yàn)證和授權(quán)?的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注www.xfxf.net其它相關(guān)文章!