Django 인증 — 사용자 로그인과 권한

Django 인증 — 사용자 로그인과 권한

웹 애플리케이션의 대부분은 사용자가 누구인지 확인하고, 어떤 것은 로그인한 사람만 볼 수 있게 해야 해요. Django는 이런 인증(authentication)과 권한 부여(authorization)를 위한 완전한 시스템을 기본으로 제공해요. 이 내용은 장고의 모든 인증 기능을 다루는 문서의 시작점이에요.

출처: Authentication | Django documentation

Django의 인증 시스템은 크게 두 부분으로 나눌 수 있어요.

  • 인증(authentication) — 사용자가 누구인지 검증하기
  • 권한 부여(authorization) — 검증된 사용자가 무엇을 할 수 있는지 결정하기

이 두 개념을 합쳐서 보통 그냥 "인증 시스템"이라 불러요.

User 모델

인증 시스템의 핵심은 사용자(User) 모델이에요. Django의 기본 User 모델은 사용자 이름, 비밀번호, 이메일 같은 공통 필드를 제공해요. Django는 이 사용자 객체로 로그인 상태를 관리해요.

from django.contrib.auth.models import User

user = User.objects.create_user('john', '[email protected]', 'password')

로그인과 로그아웃

django.contrib.auth는 요청에 사용자를 연결하는 함수를 제공해요. login() 함수는 요청에 사용자를 "로그인" 상태로 만들고, logout()은 그 상태를 해제해요.

from django.contrib.auth import authenticate, login

user = authenticate(username='john', password='password')
if user is not None:
    login(request, user)

authenticate()는 자격 증명을 확인하고 유효하면 User 객체를, 아니면 None을 돌려줘요.

로그인 요구 제한

특정 뷰를 로그인한 사용자만 접근하게 하려면 @login_required 데코레이터를 써요. 로그인하지 않은 사용자는 로그인 페이지로 리다이렉트돼요.

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...

뷰와 폼

Django는 로그인, 로그아웃, 비밀번호 변경·재설정 같은 흔한 인증 흐름을 위한 뷰와 폼도 함께 제공해요. django.contrib.auth.views에는 LoginView, LogoutView, PasswordChangeView 같은 클래스 기반 뷰가 있어서, 이들을 조합하면 기본 인증 UI를 빠르게 만들 수 있어요.

권한 부여

Django는 모델/객체 단위의 권한을 지원해요. 특정 사용자·그룹에게 권한을 부여하고, 뷰에서 request.user.has_perm() 같은 방법으로 권한을 확인할 수 있어요. @permission_required 데코레이터로 뷰 접근을 제한할 수도 있어요.

정리하면, Django 인증 시스템은 User 모델, login/logout·authenticate 같은 함수, @login_required 데코레이터, 그리고 완성된 뷰·폼까지 한 번에 제공해요. 사용자 관리가 필요한 앱이라면 처음부터 직접 만들기보다 Django가 준비한 기본기를 활용하는 게 시작이 빨라요.

더 알아보기