Django authtication

Django의 인증 기능은 사용자 인증과 관련된 다양한 기능을 제공합니다. 이를 통해 웹 애플리케이션에서 로그인, 로그아웃, 비밀번호 변경, 비밀번호 재설정 등을 구현할 수 있습니다.

Django의 인증 기능을 사용하기 위해서는, django.contrib.auth 앱을 설치하고, AUTHENTICATION_BACKENDSMIDDLEWARE 설정을 추가해 주어야 합니다.

1. django.contrib.auth

Django에서 제공하는 django.contrib.auth 앱은 프로젝트 생성 시 자동으로 설치됩니다.

만약 누락되어 있을 경우에는

  1. INSTALL_APPSdjango.contrib.auth 를 추가해 줍니다.

    # settings.py
    
    INSTALL_APPS = [
    	...
    	'django.contrib.auth',
    	...
    ]
    
  2. urls.py 파일에 auth.urls 를 추가해 줍니다.

    django.contrib.auth 앱은 로그인, 로그아웃, 비밀번호 변경 등 인증과 관련된 URL 패턴을 제공합니다. 이러한 URL 패턴은 django.contrib.auth.urls 모듈에서 정의되어 있으므로, 프로젝트의 urls.py 파일에서 이 모듈을 추가합니다.

    # urls.py
    from django.urls import include, path
    
    urlpatterns = [
        # ...
        path('auth/', include('django.contrib.auth.urls')),
        # ...
    ]
    

    위와 같이 설정하면 auth/login/, auth/logout/, auth/password_change/ 등의 URL 패턴을 사용할 수 있게 됩니다.

2. 로그인 기능

Django의 인증 기능을 사용해 로그인 기능을 구현해 보도록 하겠습니다.

먼저, FBV 방법으로 구현해 보도록 하겠습니다.

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.contrib import messages

def login_view(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            messages.success(request, '로그인 되었습니다.')
            return redirect('home')
        else:
            messages.error(request, '아이디 또는 비밀번호가 올바르지 않습니다.')
    return render(request, 'login.html')

위 코드에서 authenticate() 함수는 주어진 username과 password로 사용자를 인증합니다. 인증에 성공하면, login() 함수를 사용하여 사용자를 로그인합니다. 이후, messages.success() 함수를 사용하여 메시지를 전달하고, redirect() 함수를 사용하여 홈 페이지로 이동합니다.

위 코드에서 사용된 messages 모듈은 Django의 메시지 프레임워크를 사용하여 사용자에게 메시지를 전달하는 기능을 제공합니다. messages.success() 함수는 성공 메시지를, messages.error() 함수는 오류 메시지를 전달합니다.

위 코드에서 사용된 login.html 템플릿은 다음과 같이 작성할 수 있습니다.