Token 인증 (sanctum)
- composer.json 파일 확인하기최신버전의 라라벨에는 sanctum이 이미 설치되어 있다.
composer.json에 sanctum이 있는지 확인한 뒤 설치 여부를 결정하면 된다.- path : Laravel/composer.json

- sanctum이 존재하지 않는다면 설치
composer require laravel/sanctum # Sanctum의 설정을 내보내고(publish) # vendor:publish 아티즌 명령어를 사용해서 파일을 마이그레이션 # sanctum 설정 파일은 애플리케이션의 config 디렉토리에 위치 php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" # migration (token을 위한 "personal_access_tokens" table이 생성된다.) php artisan migrate
- Sanctum 미들웨어를 추가
(애플리케이션의 app/Http/Kernel.php 파일에 있는api 미들웨어 그룹에 Sanctum 미들웨어를 추가)# app/Http/Kernel.php 'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, ],
- Database (sqlite3) 권한 변경 (+ 확인 위해 없으면 설치)
# sqlite3가 없다면 설치한다. sudo apt-get install sqlite3 # 설치 이후 sqlite3는 다음과 같이 확인할 수 있다. sqlite3 /full/path/Laravel/database/database.sqlite # DB 접속 > .databases # 데이터베이스 확인 > .tables # 테이블 확인 > select * from users #쿼리 > .quit #종료 # db 관련 권한 변경 sudo chmod -R 775 /full/path/Laravel/database sudo chown -R user:www-data /full/path/Laravel/database
- User Model 확인
- User Model에서 “HasApiTokens” 트레잇(trait)을 사용하는지 확인
(거창하게 설명되어있지만 import 확인이라 생각하면 편하다.)
User Path : /full/path/Laravel/app/Models/User.php
HasApiTokens Path : /full/path/Laravel/Sanctum/HasApiTokens
- 이후 User 모델이 어떻게 구성되어있는지 확인해본다.
- User Model에서 “HasApiTokens” 트레잇(trait)을 사용하는지 확인
- 토큰 인증을 위한 회원 가입 및 토큰 발급
# /full/path/Laravel/routes/api.php use Illuminate\Http\Request; // Add user 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); }); // Token 발급 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.'], ]); } return $user->createToken('token-name')->plainTextToken; });
- 6-1. Postman으로 회원가입(추가) 및 토큰 발급
- 회원가입
- Postman에서 post 방식 선택
- Post 보낼 URL을 입력
- Params에 Key : Value 형태로 이메일, 패스워드, 이름을 추가
- 이후 Send 버튼 눌러서 전송
- Response (결과값) 으로 상태값 200과 메시지 success가 온다면 성공.
- 토큰 발급
- 위와 같지만 post url, key:value를 바꾸어준 뒤 보내주면 Token이 발급되어서 response로 들어온다.
- 위와 같지만 post url, key:value를 바꾸어준 뒤 보내주면 Token이 발급되어서 response로 들어온다.
- 회원가입
- 6-2. 발급된 토큰 데이터베이스에서 확인
- API 요청
7-1. Token을 발급받았으니 API 요청하여 결과값을 받아보자.# 6. 토큰 인증을 위한 회원 가입 및 토큰 발급 에서 이어짐 # /full/path/Laravel/routes/api.php Route::middleware(['auth:sanctum'])->group(function () { Route::get('/users',function (Request $request){ return User::find(1); }); });
7-2. Postman Test
- GET 방식 선택
- 요청 URL 입력
- 인증방식(Authorization) - Bearer Token 선택 > Toekn값 (6-1에서 받은) 값을 넣어주고 Send
- 그럼 response 값이 아래처럼 온다

- 토큰 해지 또는 만료 설정
기본 설정으로 생성된 토큰은 만료되지 않는다. (토큰 해지를 해줘야 만료된다.)
8-1. 토큰 만료 설정
토큰만료를 위해 expiration 설정을 해줄 수 있다.
# /full/path/Laravel/config/sanctum.php
// 'expiration' => null, // default, 영구사용가능
'expiration' => 525600, // 분 단위
// $schedule->command('sanctum:prune-expired --hours=24')->daily();
- 추가적으로
기본 인증에 사용되는 User 모델, users table을 사용하기 싫다면 config/auth.php 에서 provider를 수정해주면 된다.
# /var/www/html/lara/config/auth.php
'providers' => [
'users' => [
'driver' => 'eloquent',
//'table' => 'CreateTableName',
'model' => App\Models\CreateModelName::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
이로써
기본적인 Sanctum Token 인증 구현은 끝이다.
Mysql 연동
- Laravel에서 쓸 데이터베이스를 하나 만든다.
sudo mysql -u root -p > create database databaseName; > flush privileges; > exit
- env 파일을 수정한다.
# /full/path/Laravel/.env # DB_CONNECTION=sqlite # DB_HOST=127.0.0.1 # DB_PORT=3306 # # DB_DATABASE=laravel # DB_USERNAME=root # DB_PASSWORD= DB_CONNECTION=mysql DB_HOST=127.0.0.1 # == localhost DB_PORT=3306 # Database default port DB_DATABASE=databaseName DB_USERNAME=root DB_PASSWORD=password
- 라라벨 인증단 + mysql 연동
# 1. 생성해야하는 테이블이 있다면 php artisan make:migration create_테이블이름_table; # 1-1. /full/path/Laravel/database/migrations/[DATE]_create_테이블이름_table.php # 생성된 파일을 입맛에 맞게 수정한 뒤 migrate php artisan migrate # 2. 생성할 테이블이 없이 기본 인증만 테스트하거나 사용할 계획이라면 # 그냥 마이그레이션 해준다. php artisan migrate # 3. 이후 mysql에 접속해서 table이 제대로 생성되었는지 확인해준다. sudo mysql -u root -p > use databaseName; > show tables; > exit;
데이터베이스가 정상적으로 생성되었다면 아래와 같이 보일 것이다.

- 위 Token 인증 6-7번 Postman Test를 실행한 뒤 데이터베이스에 값이 제대로 들어오는지 확인
- DB 연동까지 완료되었다.