Laravel Sanctum의 사용자 정의 인증 가드

Sanctum에서 여러 가드를 사용할 때 인증 가드를 지정하는 방법

전문



Laravel Sanctum은 토큰 기반 API 인증 및 SPA(Single page application) 인증을 위한 이동 솔루션입니다. SPA 인증을 수행할 때 인증 가드를 사용합니다.

기본적으로 web 가드는 configuration file에 따라 사용됩니다. 기본 Laravelrequest authentication에서도 동일한 가드가 사용됩니다.

웹 앱에 여러 개panels(예: 관리자, 관리자, 고객 등)가 있는 경우 여러 인증 가드를 사용하게 됩니다. 그리고 다음과 같이 auth 미들웨어에 가드를 지정하는 방법이 있습니다.

Route::get('/setup', function () {
    // Only the users authenticated via the admin guard can visit this page.
})->middleware('auth:admin');


하지만 성소의 경우에는 경비원을 지정할 방법이 없다. 경비원 이름 대신 단어 sanctum 자체가 사용됩니다.

Route::get('/setup', function () {
    // The default `web` guard is used. There is no option to specify any other guard name here.
})->middleware('auth:sanctum');


그러면 기본이 아닌 가드를 어떻게 사용합니까? Many developers have이 이 문제에 직면했습니다. 해결합시다.

해결책



1단계: 미들웨어 생성

URL을 기반으로 인증 가드를 설정할 새 미들웨어를 생성합니다. SetSanctumGuard라고 부르겠습니다.

<?php

declare(strict_types=1);

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Str;

class SetSanctumGuard
{
    public function handle($request, Closure $next)
    {
        if (Str::startsWith($request->getRequestUri(), '/api/admin/')) {
            config(['sanctum.guard' => 'admin']);
        } elseif (Str::startsWith($request->getRequestUri(), '/api/manager/')) {
            config(['sanctum.guard' => 'manager']);
        } elseif (Str::startsWith($request->getRequestUri(), '/api/customer/')) {
            config(['sanctum.guard' => 'customer']);
        }

        return $next($request);
    }
}


웹 앱이 API 끝점에서 이 패턴을 따른다고 가정하면 미들웨어 내에서 인증 가드를 동적으로 결정할 수 있습니다. 또는 웹 앱 시나리오에 따라 다른 방법을 시도하여 가드를 결정할 수 있습니다.

2단계: 미들웨어 활성화

미들웨어를 지정하는 방법에는 여러 가지가 있습니다. 이 경우 api 파일 내부의 app/Http/Kernel.php 배열에 간단히 추가할 수 있습니다.

protected $middlewareGroups = [
    'web' => [
        // ...
    ],

    'api' => [
        \App\Http\Middleware\SetSanctumGuard::class,
        // ...
    ],
];


3단계: 구성 파일에 메모 추가(선택 사항)

나중에 팀원(또는 자신)이 놀라지 않도록 하려면 config/sanctum.php 파일에 이 사실을 기록해 두는 것이 좋습니다. 나는 그것을 좋아한다 :

return [
    'guard' => '', // This is set by the `SetSanctumGuard` middleware

    //...
];


이를 통해 웹 앱은 각 인증 가드를 사용하여 사용자 유형에 따라 경로를 보호해야 합니다.

건배



가까운 시일 내에 Sanctum에서 이 사용자 정의를 허용하기를 바랍니다. 그리고 이 사용 사례를 위해 사용자 지정 미들웨어를 만들 필요가 없습니다.

그때까지 이 빠른 해킹을 즐기고 강력한 Laravel 웹 앱을 구축하십시오. 재미있게 보내세요!


크레딧 - Glenn Carstens-PetersUnsplash님의 표지 사진

좋은 웹페이지 즐겨찾기