Laravel ist ein Open-Source-PHP-Webanwendungs-Framework, das Entwicklern dabei helfen soll, auf einfache Weise effiziente Webanwendungen zu erstellen. Laravel Passport ist Teil des Laravel-Frameworks. Es handelt sich um einen Authentifizierungsserver, der das OAuth2-Protokoll implementiert und leistungsstarke Unterstützung für die API-Entwicklung bietet. In diesem Artikel erfahren Sie, wie Sie die API-Authentifizierung mit Laravel Passport implementieren.
Bevor wir Laravel Passport verwenden, müssen wir es zuerst installieren. Laravel Passport kann durch Ausführen des folgenden Befehls installiert werden:
composer require laravel/passport
Nachdem die Installation abgeschlossen ist, müssen Sie auch den Befehl php artisan migrate
ausführen, um die erforderlichen Datentabellen zu erstellen. 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
hinzufügen: { "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" } }
Darunter wird jeweils die Middleware CreateFreshApiToken
überprüft Fordern Sie ein API-Token an und aktualisieren Sie das Token bei Bedarf automatisch.
routes/api.php
hinzugefügt werden: 🎜rrreee🎜 Im obigen Code stellt die Middleware auth:api
sicher, dass nur authentifizierte Benutzer darauf zugreifen können diese Routen. AuthController
ist der Controller, den wir später erstellen werden und der die Logik für die Authentifizierung und das API-Routing enthält. 🎜AuthController
kann mit dem folgenden Befehl erstellt werden: 🎜rrreee🎜AuthController
sollte die folgenden Methoden enthalten: 🎜rrreee🎜register()
-Methode wird verwendet für Benutzerregistrierung. Die Methode login()
wird zum Anmelden verwendet, und die Methode details()
wird verwendet, um die detaillierten Informationen des angemeldeten Benutzers abzurufen. Es ist zu beachten, dass die Methoden register()
und login()
ein neues API-Token für den authentifizierten Benutzer erstellen und es an den Client zurückgeben. 🎜<token>
durch das im vorherigen Schritt erhaltene API-Token. Wenn das Token gültig ist, erhalten Sie eine authentifizierte Antwort: 🎜rrreee🎜🎜 Zusammenfassung 🎜🎜🎜 In diesem Artikel haben wir behandelt, wie Sie die API-Authentifizierung mit Laravel Passport implementieren. Mit Laravel Passport können Sie Ihrer Web-API ganz einfach starke Authentifizierungsunterstützung hinzufügen und so Ihre Benutzerdaten sicherer machen. Laravel Passport bietet außerdem weitere leistungsstarke Funktionen wie API-Zugriffstoken-Verwaltung und OAuth2-Client-Verwaltung. Wenn Sie ein Laravel-Entwickler sind, erfahren Sie unbedingt mehr über Laravel Passport und verwenden Sie es in Ihrem nächsten Webprojekt. 🎜Das obige ist der detaillierte Inhalt vonLaravel-Entwicklung: Wie implementiert man die API-Authentifizierung mit Laravel Passport?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!