Django에서 ModelForm은 데이터베이스 모델을 기반으로 한 폼을 자동으로 생성해주는 클래스이다.
Django에서 로그인 처리는 세션(session)과 쿠키(cookie)를 활용하여 이루어진다.
로그인한 사용자의 정보를 안전하게 관리하기 위해 세션과 쿠키를 적절히 활용하는 방식이다.
세션은 서버에 사용자 정보를 저장하고 클라이언트에게는 세션 ID만 전달하는 방식이다.
# 세션 관리 설정 예시
SESSION_COOKIE_AGE = 1800 # 30분 동안 세션 유지
SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 브라우저 종료 시 세션 삭제
SESSION_COOKIE_SECURE = True # HTTPS 사용 시에만 쿠키 전송
쿠키는 클라이언트 측에 직접 사용자 정보를 저장하는 방식이다.
로그인 ➡️ 세션 생성 ➡️ 세션 ID(sessionid)를 쿠키로 전송 ➡️ 이후 요청마다 쿠키의 세션 ID를 사용하여 로그인 상태 확인
Django는 세션 ID를 쿠키로 전달하고 서버 측에서 세션 데이터를 관리하여 보안을 강화한다.
Django에서 사용자 인증과 로그인을 처리할 때 주로 사용하는 두 가지 함수이다.
from django.contrib.auth import authenticate
user = authenticate(request, username="john", password="mypassword")
if user is not None:
print("인증 성공!")
else:
print("인증 실패!")
from django.contrib.auth import authenticate, login
from django.shortcuts import redirect
def login_user(request):
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) # 세션에 사용자 정보 저장
print("로그인 성공!")
return redirect("home")
else:
print("로그인 실패!")
return redirect("login")

authenticate( )를 사용하지 않고 login( )만 사용하면 인증 절차가 없으므로 비정상적인 로그인이 발생할 수 있고
authenticate( )만 사용하면 세션이 생성되지 않아 로그인 상태가 유지되지 않는다.
이 두 함수를 함께 사용하여 로그인 과정이 올바르게 작동하도록 구성해야 한다.