
PHP 프레임워크 – CodeIgniter – 사용자 인증과 권한 관리
안녕하세요~ 😄
이번 시간에는 웹 애플리케이션 개발에서 절대 빠질 수 없는 기능!
바로 **사용자 인증(Authentication)**과 **권한 관리(Authorization)**에 대해 알아보겠습니다.
로그인, 로그아웃, 회원가입, 관리자와 일반 유저의 권한 구분 등
“누가”, “어떤 기능에 접근할 수 있는가”를 제어하는 시스템은
모든 웹 서비스의 기초 체력이자 보안의 핵심이에요!
지금부터 차근차근 함께 살펴보면서 여러분만의 인증 시스템을 만들어볼게요 💪
1. 사용자 인증이란?
사용자 인증이란 누가 로그인했는지 확인하고
해당 사용자만 사용할 수 있는 기능을 제공하는 과정을 말해요.
비유하자면,
“우리 집 초인종을 누르고 본인 인증 후 문을 열어주는 과정”
바로 그게 사용자 인증이에요! 😊
2. CodeIgniter에서 인증 구현 방법
CodeIgniter에는 인증 전용 라이브러리가 기본 포함되어 있지는 않지만,
직접 구현하거나 외부 라이브러리(예: Myth\Auth)를 연동해서 사용하면 돼요.
이번 글에서는 직접 구현하는 방식을 기준으로 설명드릴게요!
3. 기본 사용자 테이블 설계 예시
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role VARCHAR(20) DEFAULT 'user',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
username
,email
: 사용자 식별용password
: 해시된 비밀번호role
: 관리자/일반 사용자 구분
4. 회원가입 컨트롤러
// app/Controllers/Auth.php
namespace App\Controllers;
use App\Models\UserModel;
class Auth extends BaseController
{
public function register()
{
return view('auth/register');
}
public function registerSubmit()
{
$rules = [
'username' => 'required|is_unique[users.username]',
'email' => 'required|valid_email|is_unique[users.email]',
'password' => 'required|min_length[6]',
];
if (!$this->validate($rules)) {
return view('auth/register', ['validation' => $this->validator]);
}
$model = new UserModel();
$model->save([
'username' => $this->request->getPost('username'),
'email' => $this->request->getPost('email'),
'password' => password_hash($this->request->getPost('password'), PASSWORD_DEFAULT),
]);
return redirect()->to('/login')->with('message', '회원가입이 완료되었습니다!');
}
}
🔐 비밀번호는 반드시
password_hash()
로 암호화해서 저장하세요!
5. 로그인 컨트롤러
public function login()
{
return view('auth/login');
}
public function loginSubmit()
{
$model = new UserModel();
$user = $model->where('username', $this->request->getPost('username'))->first();
if (!$user || !password_verify($this->request->getPost('password'), $user['password'])) {
return redirect()->back()->with('error', '아이디 또는 비밀번호가 올바르지 않습니다.');
}
// 세션 저장
session()->set([
'user_id' => $user['id'],
'username' => $user['username'],
'role' => $user['role'],
'isLoggedIn' => true
]);
return redirect()->to('/dashboard');
}
6. 로그아웃 처리
public function logout()
{
session()->destroy();
return redirect()->to('/login')->with('message', '로그아웃 되었습니다.');
}
7. 로그인 상태 확인하기 (필터 활용)
CodeIgniter에서는 **필터(Filter)**를 사용해서
특정 경로에 로그인 여부나 권한을 확인할 수 있어요.
필터 생성
php spark make:filter AuthFilter
// app/Filters/AuthFilter.php
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class AuthFilter implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
if (!session()->get('isLoggedIn')) {
return redirect()->to('/login');
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) {}
}
8. 필터 등록 및 적용
// app/Config/Filters.php
public $aliases = [
'auth' => \App\Filters\AuthFilter::class,
];
public $globals = [
'before' => [],
'after' => [],
];
public $filters = [
'auth' => ['before' => ['dashboard', 'admin/*']],
];
이제 /dashboard
, /admin/...
경로에 접근하려면 로그인되어 있어야 합니다!
9. 관리자 권한 확인 (컨트롤러에서)
if (session()->get('role') !== 'admin') {
return redirect()->to('/')->with('error', '접근 권한이 없습니다.');
}
10. 로그인한 사용자 정보 뷰에 출력하기
<p>안녕하세요, <?= esc(session()->get('username')) ?>님!</p>
<a href="/logout">로그아웃</a>
11. 로그인 상태에 따른 메뉴 변경
<?php if (session()->get('isLoggedIn')): ?>
<a href="/dashboard">내 계정</a>
<?php else: ?>
<a href="/login">로그인</a>
<?php endif; ?>
12. Myth\Auth 라이브러리 (참고용)
CodeIgniter 4 공식 인증 라이브러리인 Myth\Auth
를 설치하면 아래 기능을 자동 지원해요:
- 회원가입
- 로그인 / 로그아웃
- 이메일 인증
- 비밀번호 초기화
- 사용자 그룹과 권한 시스템
설치:
composer require myth/auth
php spark auth:install
php spark migrate
주의할 점 ✅
항목 | 주의할 내용 |
---|---|
비밀번호 저장 | 반드시 password_hash() 로 암호화해야 함 |
세션 보안 | 사용자 정보는 최소한으로, 민감 정보 저장 금지 |
관리자 권한 | 관리자만 접근 가능한 URL은 항상 권한 체크 필수 |
필터 설정 | 특정 URL만 필터 적용하는 것이 좋음 |
로그인 유효성 | DB에 사용자 존재 여부 + password_verify() 함께 검사 |
마무리하며 😊
사용자 인증과 권한 관리는 여러분의 웹 애플리케이션을
더 안전하게, 더 스마트하게 만들어주는 핵심 기능이에요.
CodeIgniter를 통해 손쉽게 로그인, 회원가입, 로그아웃, 권한 제어까지
전부 구현할 수 있으니, 꼭 한 번 실습해보시길 추천드려요!
다음 시간에는 REST API 개발에 대해 알아보겠습니다.
그럼 오늘도 즐거운 코딩 되세요~! 😎🧑💻✨