>  기사  >  PHP 프레임워크  >  Laravel 개발: Laravel Passport를 사용하여 API 인증을 구현하는 방법은 무엇입니까?

Laravel 개발: Laravel Passport를 사용하여 API 인증을 구현하는 방법은 무엇입니까?

PHPz
PHPz원래의
2023-06-13 17:34:381599검색

Laravel은 개발자가 효율적인 웹 애플리케이션을 쉽게 구축할 수 있도록 설계된 오픈 소스 PHP 웹 애플리케이션 프레임워크입니다. Laravel Passport는 Laravel 프레임워크의 일부이며 OAuth2 프로토콜을 구현하고 API 개발을 위한 강력한 지원을 제공하는 인증 서버입니다. 이번 글에서는 Laravel Passport를 사용하여 API 인증을 구현하는 방법을 다뤄보겠습니다.

  1. Laravel Passport 설치

Laravel Passport를 사용하기 전에 먼저 Laravel Passport를 설치해야 합니다. Laravel Passport는 다음 명령을 실행하여 설치할 수 있습니다:

composer require laravel/passport

설치가 완료된 후 php artisan migration 명령을 실행하여 필요한 데이터 테이블을 생성해야 합니다. php artisan migrate命令来创建所需的数据表。

  1. 配置认证中间件

要使用Laravel Passport进行API身份验证,我们需要将其与Laravel的认证中间件结合使用。可以在app/Http/Kernel.php文件中为API组添加相应的认证中间件:

protected $middlewareGroups = [
    'api' => [
        'throttle:60,1',
        IlluminateRoutingMiddlewareSubstituteBindings::class,
        LaravelPassportHttpMiddlewareCreateFreshApiToken::class,
    ],
];

其中,CreateFreshApiToken中间件将在每个请求中检查API令牌,并在需要时自动刷新该令牌。

  1. 创建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路由的逻辑。

  1. 创建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令牌,并将其返回给客户端。

  1. 测试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>'

在上面的命令中,将d6fb5a6237ab04b68d3c67881a9080fa

    인증 미들웨어 구성
    1. Laravel Passport를 API 인증에 사용하려면 Laravel의 인증 미들웨어와 함께 사용해야 합니다. 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 토큰을 요청하고 필요할 때 자동으로 토큰을 새로 고칩니다.

      🎜API 인증 경로 생성🎜🎜🎜다음으로 API에 해당하는 인증 경로를 생성해야 합니다. routes/api.php 파일에 다음 경로를 추가할 수 있습니다. 🎜rrreee🎜위 코드에서 auth:api 미들웨어는 인증된 사용자만 액세스할 수 있도록 보장합니다. 이 노선들. AuthController는 나중에 생성할 컨트롤러이며 인증 및 API 라우팅을 처리하는 논리를 포함합니다. 🎜
        🎜 API 인증 컨트롤러 생성 🎜🎜🎜이제 API 인증 및 라우팅을 처리하는 컨트롤러를 생성해야 합니다. AuthController는 다음 명령을 사용하여 생성할 수 있습니다. 🎜rrreee🎜AuthController는 다음 메서드를 포함해야 합니다. 🎜rrreee🎜register() 메서드는 다음 작업에 사용됩니다. 사용자 등록, login() 메소드는 로그인에 사용되고, details() 메소드는 로그인한 사용자의 상세 정보를 가져오는 데 사용됩니다. register()login() 메소드는 인증된 사용자를 위한 새 API 토큰을 생성하여 클라이언트에 반환한다는 점에 유의해야 합니다. 🎜
          🎜API 인증 테스트 🎜🎜🎜이제 사용자 이름과 비밀번호를 전송하여 API 인증을 테스트할 수 있습니다. Postman 또는 컬과 같은 도구를 사용하여 다음 명령을 실행할 수 있습니다. 🎜rrreee🎜 사용자 이름과 비밀번호가 정확하면 API 토큰이 포함된 응답이 수신됩니다. 🎜rrreee🎜 그런 다음 다른 명령을 사용하여 인증이 필요한 경로에 액세스할 수 있습니다. : 🎜rrreee🎜위 명령에서 d6fb5a6237ab04b68d3c67881a9080fa를 이전 단계에서 얻은 API 토큰으로 바꿉니다. 토큰이 유효하면 인증된 응답을 받게 됩니다: 🎜rrreee🎜🎜 요약 🎜🎜🎜 이 글에서는 Laravel Passport를 사용하여 API 인증을 구현하는 방법을 다루었습니다. Laravel Passport를 사용하면 웹 API에 강력한 인증 지원을 쉽게 추가하여 사용자 데이터를 더욱 안전하게 만들 수 있습니다. Laravel Passport는 API 액세스 토큰 관리 및 OAuth2 클라이언트 관리와 같은 다른 강력한 기능도 제공합니다. Laravel 개발자라면 Laravel Passport에 대해 자세히 알아보고 다음 웹 프로젝트에서 사용해 보세요. 🎜

위 내용은 Laravel 개발: Laravel Passport를 사용하여 API 인증을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.