티스토리 뷰

기존 서비스 인증방식인 session 인증 방식과 토큰 인증방식을 동시에 사용하는 방법.
다른 서비스에서 인증된 사용자일 경우 별도의 인증인 없이 session key를 통한 인증과 그 외 루트에서 접근하는 경우
토큰을 통한 인증을 동시에 하고자 middleware를 통해 인증 처리한다.

<?php

namespace App\Http\Middleware;

use Laravel\Passport\Http\Middleware\CheckClientCredentials;

class CheckSomeMiddleware
{
    public function handle(Request $request, Closure $next): Response
    {
        // Bearer Token check middleware
        if ($request->bearerToken()) {
            return app(CheckClientCredentials::class)->handle($request, fn() => $next($request));
        }

        // session key check
        $cookie = $request->cookie('some session');
        if (! $cookie) {
            throw ValidationException::withMessages([
                'key' => 'Message',
            ]);
        }

        // some session auth process...

        return $next($request);
    }
}
<?php

namespace App\Http\Controllers;

class SomeController extends Controller
{
    function __construnct()
    {
        //make auth marco
         Auth::macro('client', fn() => auth('api')->client());
    }

    public function index()
    {
        if (auth()->user()) {
            // session authorize()
        } 
        if (auth()->client()) {
            // token authorize()
        }
    }
}
댓글