티스토리 뷰
반응형
✅ Laravel에서 JWT 인증 구현 단계
1. Laravel 프로젝트 생성 (생략 가능)
laravel new jwt-example
cd jwt-example
2. tymon/jwt-auth 패키지 설치
composer require tymon/jwt-auth
3. 서비스 프로바이더 및 alias 등록 (Laravel 5.x 필요 / Laravel 6 이상은 생략 가능)
config/app.php (Laravel 6 이상에서는 필요 없음)
'providers' => [
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
],
4. 패키지 설정 파일 생성
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
설정 파일이 config/jwt.php로 생성됩니다.
5. JWT 시크릿 키 생성
php artisan jwt:secret
.env 파일에 JWT_SECRET=... 키가 추가됩니다.
6. User 모델 설정
App\Models\User 또는 App\User 클래스에 JWTSubject 인터페이스를 구현:
use Tymon\JWTAuth\Contracts\JWTSubject;
class User extends Authenticatable implements JWTSubject
{
use Notifiable;
public function getJWTIdentifier()
{
return $this->getKey(); // 보통 PK (id)
}
public function getJWTCustomClaims()
{
return []; // 커스텀 claims 추가 가능
}
}
7. 인증 Guard 설정
config/auth.php에서 guards 수정:
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
8. AuthController 작성 (로그인 / 회원가입 등)
php artisan make:controller AuthController
app/Http/Controllers/AuthController.php 예시:
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Tymon\JWTAuth\Facades\JWTAuth;
class AuthController extends Controller
{
public function register(Request $request)
{
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
$token = JWTAuth::fromUser($user);
return response()->json(compact('user', 'token'));
}
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return response()->json(compact('token'));
}
public function me()
{
return response()->json(auth()->user());
}
public function logout()
{
auth()->logout();
return response()->json(['message' => 'Successfully logged out']);
}
public function refresh()
{
return response()->json(['token' => auth()->refresh()]);
}
}
9. 라우트 정의
routes/api.php 파일에 다음과 같이 추가:
Route::post('register', [AuthController::class, 'register']);
Route::post('login', [AuthController::class, 'login']);
Route::middleware('auth:api')->group(function () {
Route::get('me', [AuthController::class, 'me']);
Route::post('logout', [AuthController::class, 'logout']);
Route::post('refresh', [AuthController::class, 'refresh']);
});
🔐 테스트 시 주의 사항
- 인증된 요청에는 반드시 Authorization: Bearer <token> 헤더를 추가해야 합니다.
- Postman 등을 사용할 때 이 헤더를 설정해야 보호된 라우트 접근이 가능합니다.
반응형
'배움 > PHP' 카테고리의 다른 글
Laravel 11 Swagger (0) | 2025.06.02 |
---|---|
Laravel 11 비동기 구현 (0) | 2025.05.27 |
PHP supervisor 설치 및 실행 (0) | 2025.05.21 |
Laravel11 브로드캐스팅 PrivateChannel , reverb 사용 예시 (0) | 2025.05.19 |
Laravel 11 테스트 코드 작성 샘플 (0) | 2025.05.14 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- reflectionclass
- swagger
- #collect
- createfromformat
- privatechannel
- php
- 비동기
- 명령어
- PYTHON
- laravel 12
- jp:a
- call_user_func
- wsl
- mysql
- facades
- researcher
- array_combine
- ubuntu
- curl_multi_init
- 설치
- laravel 11
- 설정
- uniqid
- Laravel
- WSL2
- eloquent
- flask
- ob_get_contents
- laravel 테스트
- strict_types
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
글 보관함