PHP 프레임워크 – Laravel – 6 – 사용자 인증과 권한 관리

PHP 프레임워크 - Laravel - 6 - 사용자 인증과 권한 관리
PHP 프레임워크 – Laravel – 6 – 사용자 인증과 권한 관리

PHP 프레임워크 – Laravel – 사용자 인증과 권한 관리

안녕하세요~ 😄
오늘은 Laravel에서 웹 애플리케이션을 개발할 때 반드시 필요한 **사용자 인증(Authentication)**과 **권한 관리(Authorization)**에 대해 이야기해보려고 해요.

회원가입, 로그인, 로그아웃, 관리자 페이지 접근 제한 등등…
웹 서비스를 운영한다면 꼭 필요한 기능이죠?

Laravel은 이 모든 걸 정말 손쉽게! 안전하게! 강력하게! 구축할 수 있도록 도와주는 다양한 기능들을 제공해준답니다 🚀


사용자 인증이란?

**Authentication(인증)**은 “당신이 누구냐?”를 확인하는 절차입니다.

예를 들어 로그인 폼에서 이메일과 비밀번호를 입력했을 때,
그 정보가 맞는 사용자인지 확인하는 과정이 바로 인증이에요!


권한 관리란?

**Authorization(권한 부여)**은 “당신이 이 기능을 써도 되느냐?”를 판단하는 절차입니다.

예를 들어, 일반 사용자는 관리자 페이지에 들어오면 안 되겠죠?
이렇게 권한에 따라 접근을 제어하는 걸 의미합니다.


1. Laravel Breeze 설치 (인증 스캐폴딩)

Laravel은 기본적으로 인증 기능이 내장돼 있고,
간단한 인증 템플릿은 Breeze, Jetstream, UI 등 여러 방식으로 구현할 수 있어요.

여기서는 가장 가볍고 초보자에게 적합한 Breeze를 소개할게요.

Breeze 설치

composer require laravel/breeze --dev
php artisan breeze:install
npm install && npm run dev
php artisan migrate

설치 후에는 register, login, logout 등의 경로가 자동으로 생성돼요.


2. 회원가입과 로그인 구현

Breeze를 설치하면 routes/web.php에 아래와 같은 인증 라우트가 등록됩니다.

Route::get('/login', [AuthenticatedSessionController::class, 'create']);
Route::post('/login', [AuthenticatedSessionController::class, 'store']);
Route::post('/logout', [AuthenticatedSessionController::class, 'destroy']);

회원가입도 마찬가지로:

Route::get('/register', [RegisteredUserController::class, 'create']);
Route::post('/register', [RegisteredUserController::class, 'store']);

✅ 로그인 후 인증 확인

use Illuminate\Support\Facades\Auth;

if (Auth::check()) {
    // 로그인된 사용자
    $user = Auth::user();
}

3. 인증된 사용자만 접근 가능한 페이지

Laravel에서는 인증이 필요한 경로에 미들웨어를 추가해서 제어할 수 있어요.

예: 대시보드 보호

Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware('auth');

로그인하지 않은 사용자가 접근하려고 하면 자동으로 로그인 페이지로 리디렉션됩니다.


4. 사용자 정보 활용하기

로그인한 사용자의 정보를 어디서든 쉽게 가져올 수 있어요!

<p>안녕하세요, {{ Auth::user()->name }}님!</p>

Blade 템플릿에서도 사용할 수 있고,

$user = Auth::user();
echo $user->email;

컨트롤러에서도 사용할 수 있어요.


5. 로그아웃 기능 구현

폼 또는 링크로 간단하게 로그아웃할 수 있어요.

<form method="POST" action="{{ route('logout') }}">
    @csrf
    <button type="submit">로그아웃</button>
</form>

6. 권한 관리 (Gate & Policy)

Laravel에서는 사용자의 역할에 따라 접근을 제어할 수 있는 GatePolicy 기능을 제공합니다.


Gate 사용법 (간단한 권한 제어)

App\Providers\AuthServiceProvider.php에서 Gate를 등록해요.

use Illuminate\Support\Facades\Gate;

public function boot()
{
    Gate::define('admin-only', function ($user) {
        return $user->is_admin;
    });
}

이제 컨트롤러나 라우트에서 아래처럼 사용 가능!

if (Gate::denies('admin-only')) {
    abort(403); // 접근 금지
}

혹은 Blade에서:

@can('admin-only')
    <a href="/admin">관리자 페이지</a>
@endcan

Policy 사용법 (모델 단위 권한 제어)

php artisan make:policy PostPolicy --model=Post

PostPolicy 클래스에 권한 규칙을 정의합니다.

public function update(User $user, Post $post)
{
    return $user->id === $post->user_id;
}

등록은 AuthServiceProvider.php에서:

protected $policies = [
    Post::class => PostPolicy::class,
];

컨트롤러에서 이렇게 사용 가능:

$this->authorize('update', $post);

7. 관리자 역할 분리하기

마이그레이션에 is_admin 컬럼 추가

php artisan make:migration add_is_admin_to_users_table
Schema::table('users', function (Blueprint $table) {
    $table->boolean('is_admin')->default(false);
});

사용자 지정 미들웨어로 보호하기

php artisan make:middleware AdminMiddleware
public function handle($request, Closure $next)
{
    if (Auth::check() && Auth::user()->is_admin) {
        return $next($request);
    }

    abort(403);
}

app/Http/Kernel.php에 등록:

'admin' => \App\Http\Middleware\AdminMiddleware::class,

라우트에 적용:

Route::get('/admin', [AdminController::class, 'index'])->middleware('admin');

주의할 점 ✅

항목 설명
CSRF 보호 모든 로그인/회원가입 폼에 @csrf 필수
비밀번호 암호화 Laravel은 자동으로 bcrypt 해시 적용
인증 미들웨어 auth를 적용하지 않으면 누구나 접근 가능
사용자 권한 체크 Gate, Policy 또는 Middleware 적극 활용
사용자 세션 로그인 후 Auth::user()로 언제든 접근 가능

요약 정리 🎯

항목 설명
인증 기본 Laravel Breeze 등으로 쉽게 구현
로그인/로그아웃 컨트롤러, 라우트 자동 생성
인증된 사용자 확인 Auth::check(), Auth::user() 사용
권한 제어 Gate, Policy, Middleware로 구현
관리자 분리 DB 칼럼과 미들웨어로 접근 제어 가능

마무리하며 😊

사용자 인증과 권한 관리는 웹 서비스를 운영하는 데 있어 기본 중의 기본이죠.
Laravel은 이 과정을 정말 쉽게 처리할 수 있도록 도와주는 프레임워크예요.

단 몇 줄의 코드로 로그인, 회원가입, 권한 제한까지 할 수 있다니…
이거야말로 개발자 인생에서 가장 반가운 자동화 아니겠어요? 😆

다음 시간에는 파일 업로드와 스토리지 처리를 함께 배워보도록 할게요!
그럼 오늘도 안전하고, 믿음직한 Laravel 서비스 만들어가세요~ 💻🛡️✨

답글 남기기