Middleware를 통해 HTTP 요청 응답 사이에서 로그인 인증 확인 작업을 추가한다.
지난번 로그인 기능을 구현했으나 말그대로 로그인 기능이였고 프로젝트에서 라우팅 된 다른 url 임의로 접속 시 로그인을 통한 인증 확인이 전혀 이루어지지 않았다!(그림참고)
그래서 Middleware를 통해 로그인 인증을 확인하고 인증 되지 않은 url로 접속 시 로그인 화면으로 이동하게하는 작업을 하려고한다.
요약하자면 Middleware는 HTTP 요청과 응답 사이에서 특정 작업 수행이 가능하다.
요청 및 응답처리
가로채기및 수정
from django.shortcuts import redirect
from django.urls import reverse
class LoginRequiredMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if not request.user.is_authenticated:
if not request.path.startswith(reverse("common:login")):
return redirect(reverse("common:login"))
response = self.get_response(request)
return response
init()
call()
request.user.is_authenticated
request.path.startswith(reverse("login"))
# common 내의 urls.py
app_name = "common"
path(
"login/",
auth_views.LoginView.as_view(template_name="common/login.html"),
name="login",
),
MIDDLEWARE = [
"common.middleware.LoginRequiredMiddleware",
]
# middleware login 인증이 아닌 경우 이동하는 URL
LOGIN_URL = "/login"