Laravel JWT - 3. 사용자정보 > IT 기술백서

IT 기술백서

직접 알아내거나 검색하기 귀찮아서 모아 둔 것

php | Laravel JWT - 3. 사용자정보

본문

요약

  1. 컨트롤러에 사용자정보를 처리하는 user() 메서드를 만든다.
  2. 1번의 라우터를 추가하고 인증실패에 대한 라우터도 추가한다.
  3. Authenticate 미들웨어 redirectTo() 함수에 api에 대한 처리를 추가한다.

 

1. app\Http\Controllers\JWTAuthController.php 열고 user() 메서드를 추가한다.

[code]

class JWTAuthController extends Controller

{

    ...

    public function user()

    {

        return response()->json(Auth::guard('api')->user());

    }

}

[/code]

Auth 는 \vendor\laravel\framework\src\Illuminate\Auth\AuthManager 를 불러오는 Facade 이며

Facade는 \vendor\laravel\framework\src\Illuminate\Support\Facades\Auth.php 에 정의되어 있으며 config/app.php 에 alias 로 선언되어 있다


Auth::guard() 는 인자에 따른 인증드라이버를 호출한다.

config/auth.php 에서 설정한대로 'web'이면 세션드라이버(SessionGuard), 'api' 이면 토큰드라이버(TokenGuard)를 가져온다.

user() 는 주어진 Provider 로 토큰인증을 통해 성공하면 해당유저정보를, 실패하면 null 이 리턴된다. 

 

 

 

 

 

2. 라우트를 추가한다.  이때 인증되지 않은 사용자용 라우트도 함께 추가한다.

[code]

// 인증되지 않은 사용자용

Route::get('unauthorized', function() {

    return response()->json([

        'status' => 'error',

        'message' => 'Unauthorized'

    ], 401);

})->name('api.jwt.unauthorized');


// 사용자 정보

Route::group(['middleware' => 'auth:api'], function() {

    Route::get('user', [JWTAuthController::class, 'user'])->name('api.jwt.user');

}); 

[/code]

['middleware' => 'auth:api'] 에서 auth:api 는 auth alias 로 지정된 미들웨어를 호출하는데 이때 : 뒤에 api 는 미들웨어의 handle 메소드 가장 마지막에 추가로 전달되는 문자열 인자이다.  Authenticate 메소드에 아래와 같이 ...$guards 로 정의 되어 있다.

 

class Authenticate implements AuthenticatesRequests

{

    public function handle($request, Closure $next, ...$guards)

    {

        .... 

    }

}


3. api/Http/Middleware/Authenticate.php 를 열고 redirectTo() 메서드에 api 일 경우 분기시키는 코드를 추가한다.

[code]

namespace App\Http\Middleware;


use Illuminate\Auth\Middleware\Authenticate as Middleware;


class Authenticate extends Middleware

{

    /**

     * Get the path the user should be redirected to when they are not authenticated.

     *

     * @param  \Illuminate\Http\Request  $request

     * @return string|null

     */

    protected function redirectTo($request)

    {

       // api 로 호출했을때

        if ($request->expectsJson() || $request->is('api/*')) {

            return route('api.jwt.unauthorized');

        }

        // web 으로 호출했을때

        return route('login');

    }

}

[/code]

Illuminate\Auth\Middleware\Authenticate 를 상속하였기때문에 인증과 관련된 모든 처리는 부모 클래스에서 처리한다.

처리 후 인증실패이면 이동하는 메서드인 redirectTo() 만 재정의한다.

 

4. Postman 을 열고 Authorization 탭에서 Bearer Token 을 선택하고 앞전 포스팅에서 구한 토큰값을 입력한 뒤 실행한다.

실행결과

[code]

{

    "id": 1,

    "name": "홍길동",

    "email": "[email protected]",

    "email_verified_at": null,

    "created_at": "2021-02-25T04:45:13.000000Z",

    "updated_at": "2021-02-25T04:45:13.000000Z"

[/code]

댓글 0개

등록된 댓글이 없습니다.

Menu