Laravel - 인증: 초보자 가이드
안녕하세요, 미래의 Laravel 개발자 여러분! 오늘 우리는 Laravel 인증의 흥미로운 세상으로 뛰어들어 볼 거예요. 프로그래밍에 처음 도전하는 분이라도 걱정 마세요. 이 여정에서 여러분의 친절한 안내자로서 단계별로 모든 것을 설명해 드릴게요. 시작해 보겠습니다!
기본 이해: 인증 vs 인가
Laravel의 인증 기능에 들어가기 전에, 흔한 혼란을 풀어보겠습니다.
인증: 너는 누구야?
인증은 클럽의 보안원을 상상해 봅시다. 너는 누구인지 증명하는 것이에요. 디지털 세계에서는 일반적으로 사용자이름과 비밀번호로 로그인하는 것을 의미합니다.
인가: 너는 무엇을 할 수 있어?
이제 인가는 비혼합리스트를 상상해 봅시다. 클럽에 들어왔을 때 (인증된 상태에서) 인가는 네가 접근할 수 있는 구역을 결정합니다. 비혼합 룸에 갈 수 있니? DJ 보스 뒤에 가서 할 수 있니?
Laravel에서는 먼저 사용자를 인증한 다음, 인가를 사용하여 애플리케이션에서 할 수 있는 것을 제어합니다.
Laravel의 인가 메커니즘
Laravel은 강력하고 유연한 인가 시스템을 제공합니다. 이를 소화 가능한 조각으로 나눠보겠습니다:
1. 게이트
게이트는 간단한 클로저 기반으로 인가 작업을 수행하는 방법입니다. 애플리케이션의 체크포인트로 생각해 볼 수 있습니다.
게이트를 정의하는 방법은 다음과 같습니다:
Gate::define('edit-post', function ($user, $post) {
return $user->id === $post->user_id;
});
이 게이트는 사용자가 게시물을 편집할 수 있는지 확인합니다. 사용자의 ID가 게시물 작성자의 ID와 일치하면 true를 반환합니다.
게이트를 컨트롤러에서 사용하려면 다음과 같이 합니다:
if (Gate::allows('edit-post', $post)) {
// 사용자는 게시물을 편집할 수 있습니다...
}
또는 Blade 템플릿에서:
@can('edit-post', $post)
<!-- 편집 버튼 표시 -->
@endcan
2. 정책
정책은 특정 모델이나 리소스에 대한 인가 로직을 조직화한 클래스입니다. 각 모델에 대한 특화된 보안원이라고 생각해 볼 수 있습니다.
우리의 Post 모델에 정책을 만들어 보겠습니다:
php artisan make:policy PostPolicy --model=Post
이 명령어는 PostPolicy 클래스를 생성합니다. 이에 메서드를 추가해 보겠습니다:
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
이제 이 정책을 컨트롤러에서 사용할 수 있습니다:
$this->authorize('update', $post);
또는 Blade 템플릿에서:
@can('update', $post)
<!-- 업데이트 버튼 표시 -->
@endcan
3. 역할과 권한
Laravel은 내장된 역할 시스템을 제공하지 않지만, 쉽게 구현할 수 있습니다. 간단한 예제를 보겠습니다:
먼저, 사용자 테이블에 'role' 열을 추가합니다:
Schema::table('users', function (Blueprint $table) {
$table->string('role')->default('user');
});
이제 관리자 권한을 확인하는 게이트를 만들어 보겠습니다:
Gate::define('admin', function ($user) {
return $user->role === 'admin';
});
이를 컨트롤러나 뷰에서 사용할 수 있습니다:
if (Gate::allows('admin')) {
// 사용자는 관리자입니다...
}
@can('admin')
<!-- 관리자 패널 링크 표시 -->
@endcan
4. 미들웨어
Laravel은 라우트 수준에서 접근을 제어할 수 있는 미들웨어를 사용할 수 있습니다. 커스텀 미들웨어를 만들어 보겠습니다:
php artisan make:middleware CheckRole
이 미들웨어의 handle 메서드에서:
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
abort(403, '비인가된 작업.');
}
return $next($request);
}
이 미들웨어를 app/Http/Kernel.php
에 등록합니다:
protected $routeMiddleware = [
// ...
'role' => \App\Http\Middleware\CheckRole::class,
];
이제 라우트에서 사용할 수 있습니다:
Route::get('/admin', function () {
//
})->middleware('role:admin');
메서드 표
이 글에서 다룬 주요 메서드의 표입니다:
메서드 | 설명 | 예제 |
---|---|---|
Gate::define() | 새로운 인가 게이트 정의 | Gate::define('edit-post', function ($user, $post) { ... }) |
Gate::allows() | 게이트가 작업을 허용하는지 확인 | Gate::allows('edit-post', $post) |
$this->authorize() | 컨트롤러에서 작업 인가 | $this->authorize('update', $post) |
@can | Blade 디렉티브로 인가 | @can('update', $post) ... @endcan |
Gate::forUser() | 특정 사용자에 대한 게이트 인스턴스 가져오기 | Gate::forUser($user)->allows('edit-post', $post) |
기억하세요, 인가는 인증된 사용자가 애플리케이션에서 할 수 있는 것을 제어하는 것입니다. 안전하고 사용자 친화적인 웹 애플리케이션을 구축하는 데 중요한 부분입니다.
연습하고 더 많은 애플리케이션을 만들면서, 이 개념에 익숙해질 것입니다. 두려워 말고 실험해 보세요 - 우리 모두가 그렇게 배웁니다!
행복하게 코딩하세요, 미래의 Laravel 전문가 여러분! ?????
Credits: Image by storyset