Laravel은 개발자가 효율적인 웹 애플리케이션을 쉽게 구축할 수 있도록 설계된 오픈 소스 PHP 웹 애플리케이션 프레임워크입니다. Laravel Passport는 Laravel 프레임워크의 일부이며 OAuth2 프로토콜을 구현하고 API 개발을 위한 강력한 지원을 제공하는 인증 서버입니다. 이번 글에서는 Laravel Passport를 사용하여 API 인증을 구현하는 방법을 다뤄보겠습니다.
Laravel Passport를 사용하기 전에 먼저 Laravel Passport를 설치해야 합니다. Laravel Passport는 다음 명령을 실행하여 설치할 수 있습니다:
composer require laravel/passport
설치가 완료된 후 php artisan migration
명령을 실행하여 필요한 데이터 테이블을 생성해야 합니다. 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
파일에 API 그룹에 해당하는 인증 미들웨어를 추가할 수 있습니다. { "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" } }
그 중 CreateFreshApiToken
미들웨어가 각각 확인됩니다. API 토큰을 요청하고 필요할 때 자동으로 토큰을 새로 고칩니다.
routes/api.php
파일에 다음 경로를 추가할 수 있습니다. 🎜rrreee🎜위 코드에서 auth:api
미들웨어는 인증된 사용자만 액세스할 수 있도록 보장합니다. 이 노선들. AuthController
는 나중에 생성할 컨트롤러이며 인증 및 API 라우팅을 처리하는 논리를 포함합니다. 🎜AuthController
는 다음 명령을 사용하여 생성할 수 있습니다. 🎜rrreee🎜AuthController
는 다음 메서드를 포함해야 합니다. 🎜rrreee🎜register()
메서드는 다음 작업에 사용됩니다. 사용자 등록, login()
메소드는 로그인에 사용되고, details()
메소드는 로그인한 사용자의 상세 정보를 가져오는 데 사용됩니다. register()
및 login()
메소드는 인증된 사용자를 위한 새 API 토큰을 생성하여 클라이언트에 반환한다는 점에 유의해야 합니다. 🎜<token>
를 이전 단계에서 얻은 API 토큰으로 바꿉니다. 토큰이 유효하면 인증된 응답을 받게 됩니다: 🎜rrreee🎜🎜 요약 🎜🎜🎜 이 글에서는 Laravel Passport를 사용하여 API 인증을 구현하는 방법을 다루었습니다. Laravel Passport를 사용하면 웹 API에 강력한 인증 지원을 쉽게 추가하여 사용자 데이터를 더욱 안전하게 만들 수 있습니다. Laravel Passport는 API 액세스 토큰 관리 및 OAuth2 클라이언트 관리와 같은 다른 강력한 기능도 제공합니다. Laravel 개발자라면 Laravel Passport에 대해 자세히 알아보고 다음 웹 프로젝트에서 사용해 보세요. 🎜위 내용은 Laravel 개발: Laravel Passport를 사용하여 API 인증을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!