반응형
구성 : Laravel Framework 8.5
2021.05.21 - [Framework/Laravel Framework] - [Laravel] JWT API Server 구축하기(1)
2021.05.25 - [Framework/Laravel Framework] - [Laravel] JWT API Server 구축하기(2)
전 포스팅에서는 JWT를 이용하여 구축해 보았다. 이번 포스팅에서는 토큰 기반이지만 JWT보다는 가벼운 너낌..?의 sanctum을 이용하여 구축해볼 것이다.
https://laravel.kr/docs/8.x/sanctum
라라벨 메뉴얼에 설명이 아주 잘 되어 있으므로 간략하게 내용 정리만 하고 코드를 살펴 보겠다.
sanctum을 이용하면 API 토큰 발급과 SPA(Single Page Application) 인증시 사용할 수 있다.
이번 포스팅에서는 API 토큰에 관해서만 진행하도록 하겠다. 실습은 Postman으로 진행.
API 인증
- Sanctum은 OAuth의 복잡함 없이 사용자에게 API 토큰을 발행하는 단순한 패키지이다.
- Sanctum을 사용하여 해당 토큰을 생성하고 관리 할 수 있습니다. 이러한 토큰들은 매우 긴 만료일(몇 년)을 가지고 있지만, 어느 때라도 사용자에 의해서 해지(revoke) 할 수도 있다.
- Sanctum은 단일 데이터베이스 테이블 내에 사용자 API 토큰을 저장하고, 유효한 API 토큰을 포함해야하는 Authorization 헤더를 통해 오는 요청(request)만 인증에 성공하게 된다.
설치
1. Composer
composer require laravel/sanctum
2. vendor:publish
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
3. migration (token을 위한 personal_access_tokens table이 생성된다.)
본 포스팅에서는 Sanctum에서 제공하는 기본 migration을 이용한다.
php artisan migrate
4. User 모델 확인
토큰을 생성하기 전에 User모델이 HasApiTokens trait을 사용하고 있는지 확인한다. 값이 지정되지 않다면 코드를 수정하도록 하자.
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
.
.
.
}
5. 회원가입 및 Token 발급
// 회원가입
Route::post('/sanctum/register',function (Request $request) {
User::create([
'email' => $request->input('email'),
'password' => bcrypt($request->input('password')),
'name' => $request->input('name')
]);
return response()->json(['message'=>'success'],200);
});
// 토큰 발급
Route::post('/sanctum/token', function (Request $request) {
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
$user = User::where('email', $request->email)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect.'],
]);
}
// createToken의 인자는 token table의 name 컬럼 값에 저장된다.
return $user->createToken('token-name')->plainTextToken;
});
sanctum token table에 저장된 걸 확인할 수 있다.
6. 발급한 토큰으로 API 요청
Route::middleware(['auth:sanctum'])->group(function () {
Route::get('/users',function (Request $request){
return User::find(1);
});
});
토큰 발급 API 요청 후 응답값을 Authorization->Bearer Token을 선택하고 Token에 값을 입력한 후 요청한다.
토큰값이 잘못되거나, 누락 될 경우엔 처리를 하지 않았으므로 PHP 에러가 발생한다.
7. 만료 시간 설정
config\sanctum.php
<?php
return [
.
.
// null 일때는 만료 시간이 없으므로 영구하게 사용할 수 있다.
// 만료 기간을 지정하려면 null 대신 값을 입력하면 된다.
'expiration' => null,
.
.
];
반응형
'Framework > Laravel Framework' 카테고리의 다른 글
[Laravel] Request LifeCycle (3) (0) | 2021.09.07 |
---|---|
[Laravel] Request LifeCycle (2) (0) | 2021.07.16 |
[Laravel] Request LifeCycle (1) (0) | 2021.07.09 |
[Laravel] api.php 와 web.php의 차이점? (0) | 2021.07.08 |
[Laravel] Dropzone.js 사용하기 (0) | 2021.06.16 |
댓글