Laravel est un framework d'application Web PHP open source conçu pour aider les développeurs à créer facilement des applications Web efficaces. Laravel Passport fait partie du framework Laravel. Il s'agit d'un serveur d'authentification qui implémente le protocole OAuth2 et fournit un support puissant pour le développement d'API. Dans cet article, nous expliquerons comment implémenter l'authentification API à l'aide de Laravel Passport.
Avant d'utiliser Laravel Passport, nous devons d'abord l'installer. Laravel Passport peut être installé en exécutant la commande suivante :
composer require laravel/passport
Une fois l'installation terminée, vous devez également exécuter la commande php artisan migrate
pour créer les tables de données requises. php artisan migrate
命令来创建所需的数据表。
要使用Laravel Passport进行API身份验证,我们需要将其与Laravel的认证中间件结合使用。可以在app/Http/Kernel.php
文件中为API组添加相应的认证中间件:
protected $middlewareGroups = [ 'api' => [ 'throttle:60,1', IlluminateRoutingMiddlewareSubstituteBindings::class, LaravelPassportHttpMiddlewareCreateFreshApiToken::class, ], ];
其中,CreateFreshApiToken
中间件将在每个请求中检查API令牌,并在需要时自动刷新该令牌。
接下来,我们需要为API创建相应的认证路由。可以在routes/api.php
文件中添加以下路由:
Route::post('login', 'APIAuthController@login'); Route::post('register', 'APIAuthController@register'); Route::group(['middleware' => ['auth:api']], function() { Route::get('details', 'APIAuthController@details'); // 添加更多需要登录才能访问的API路由 });
在上面的代码中,auth:api
中间件将确保只有已经通过身份验证的用户才能访问这些路由。AuthController
是我们稍后将创建的控制器,其中包含处理身份验证和API路由的逻辑。
现在,我们需要创建处理API身份验证和路由的控制器。可以使用以下命令创建AuthController
:
php artisan make:controller API/AuthController
AuthController
中应该包含以下方法:
use IlluminateHttpRequest; use IlluminateSupportFacadesAuth; use IlluminateSupportFacadesValidator; use AppUser; class AuthController extends Controller { /** * 用户注册 * * @param IlluminateHttpRequest $request * @return IlluminateHttpResponse */ public function register(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|string|max:255', 'email' => 'required|string|email|unique:users', 'password' => 'required|string|min:6', ]); if ($validator->fails()){ return response(['errors'=>$validator->errors()->all()], 400); } $request['password'] = bcrypt($request['password']); $user = User::create($request->toArray()); $token = $user->createToken('MyApp')->accessToken; return response(['token' => $token], 200); } /** * 用户登录 * * @param IlluminateHttpRequest $request * @return IlluminateHttpResponse */ public function login(Request $request) { $validator = Validator::make($request->all(), [ 'email' => 'required|string|email', 'password' => 'required|string', ]); if ($validator->fails()) { return response(['errors'=>$validator->errors()->all()], 400); } if (!Auth::attempt(['email' => $request['email'], 'password' => $request['password']])) { return response(['message' => 'Invalid login credentials'], 400); } $user = $request->user(); $token = $user->createToken('MyApp')->accessToken; return response(['token' => $token], 200); } /** * 获取用户详细信息 * * @param IlluminateHttpRequest $request * @return IlluminateHttpResponse */ public function details(Request $request) { return response()->json(['user' => $request->user()], 200); } }
register()
方法用于用户注册,login()
方法用于用户登录,details()
方法用于获取已登录用户的详细信息。需要注意的是,register()
和login()
方法将为已经通过验证的用户创建新的API令牌,并将其返回给客户端。
现在,我们可以通过发送用户名和密码来测试API身份验证。可以使用Postman或curl等工具执行以下命令:
curl -X POST http://your-app-url/api/login -H 'content-type: application/json' -d '{ "email": "user@example.com", "password": "password" }'
如果用户名和密码是正确的,将收到包含API令牌的响应:
{ "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImU4YmI2Njk0MGEyNmIzY2Q2ZmY4M2Q3MjQ5ZjgzODE1MTI2ZmRkMDIyM2YyMzVmOGZmNjhlOWM5NGU2Mzk4ZTU3ZWZiMDJhNmQyZmRlZjA2In0.eyJhdWQiOiIxIiwianRpIjoiZThiYjY2OTAwZTI2YjNjZDZmZjgzZDcyNDlmODM4MTUxMjZmZGQwMjIzZjIzNWY4ZmY2OGU5Yzk0ZTYzOThlNTdlZmIwMmE2ZDJmZGVmMDYiLCJpYXQiOjE2Mjg5NDM3NzQsIm5iZiI6MTYyODk0Mzc3NCwiZXhwIjoxNjMxMDQ5Nzc0LCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.toR762TgsNDarQZs6azl-jg-tP2996vzUc-LOQB90Twcb0Y3BC5vrd3jDW70QQw961MwV_sFrU1dhyKLMN76lG6B03zv6GjU6tLHyrqQi88t0clSrVupAcaQHOAB0gGLBRAOc5Ql1z9CHXx8f_FkA3RVC4htHNTk_r0mM-szWcf1sRONQYaARPDFl7ZJwj1_wYB7M6dcpiEDDhpyzmRFPv7pYyX8805BL4yg6z-Kmxc-DW4GSS4NTBxnctwGPf9w8fYc2zJGHXmT6OtqVjuqKDdFQgxIQhEkeSldBZmzTIPIR_tTa8Ub3Cxlx69zAfJTHosXwPYQOO03LBJwNVdjeLIkKgQK1PcAXD2kN4-RuyTEMXYNQ0wRGaHIb3vxwqVdjrrVE9yrDMIpAPRgzFwzXbJWvKmxzZpFTUz9RvIqUFt2zNbIG5kLOUyvmKIqO-aTISCT0wu0T0ZEq-DpXJ7-C6z-M0cJJP37y7eV4jdAMx7yD9jT85Knv4_hjLyKvF4We5DSSOYjeIVoq3XHNJdmYJ7X3ph6Ko1CfdtVKNVf20Vx8Z_Zi-pe9bTY0n-tSkwDvVXpVOrb3BOalq7MbOpTe8Klf9uZ_ZIDqTlTnrYV_oh_5isrImv7r8D1NX1G4p9jRcI16MEFDE" }
然后,可以使用另一个命令来访问需要身份验证的路由:
curl -X GET http://your-app-url/api/details -H 'authorization: Bearer <token>'
在上面的命令中,将<token>
app/Http/Kernel.php
: { "user": { "id": 1, "name": "User", "email": "user@example.com", "email_verified_at": null, "created_at": "2021-08-13T02:58:04.000000Z", "updated_at": "2021-08-13T02:58:04.000000Z" } }
Parmi eux, le middleware CreateFreshApiToken
sera vérifié dans chaque demandez un jeton API et actualisez automatiquement le jeton en cas de besoin.
routes/api.php
: 🎜rrreee🎜 Dans le code ci-dessus, le middleware auth:api
garantira que seuls les utilisateurs authentifiés pourront accéder ces itinéraires. AuthController
est le contrôleur que nous créerons plus tard et contient la logique pour gérer l'authentification et le routage API. 🎜AuthController
peut être créé à l'aide de la commande suivante : 🎜rrreee🎜AuthController
doit contenir les méthodes suivantes : 🎜rrreee🎜La méthode register()
est utilisée pour enregistrement de l'utilisateur, la méthode login()
est utilisée pour se connecter et la méthode details()
est utilisée pour obtenir les informations détaillées de l'utilisateur connecté. Il convient de noter que les méthodes register()
et login()
créeront un nouveau jeton API pour l'utilisateur authentifié et le renverront au client. 🎜<token>
par le jeton API obtenu à l'étape précédente. Si le jeton est valide, vous obtiendrez une réponse authentifiée : 🎜rrreee🎜🎜 Résumé 🎜🎜🎜 Dans cet article, nous avons expliqué comment implémenter l'authentification API à l'aide de Laravel Passport. Grâce à Laravel Passport, vous pouvez facilement ajouter une prise en charge d'authentification forte à votre API Web, rendant ainsi vos données utilisateur plus sécurisées. Laravel Passport fournit également d'autres fonctionnalités puissantes telles que la gestion des jetons d'accès API et la gestion des clients OAuth2. Si vous êtes un développeur Laravel, assurez-vous d'en savoir plus sur Laravel Passport et de l'utiliser dans votre prochain projet Web. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!