django authorization for accessing인가 {mixins.{LoginRequiredMixin, UserPassesTestMixin}}
- User authentication in django {doc}
- Delete Article {YT}
- 0014.1 Django 🎈 에서 아티클을 지우는 페이지로 가는 GET요청과 실제 삭제를 수행하는 POST요청을 현재 아무나 할 수 있게 되었다.
- 하지만 이것은 우리가 원하던 유즈케이스가 아니다. 따라서 현재 세션에 로그인한 사람과 삭제하고자 하는 아티클의 author.id가 일치하는 경우에만
<int:pk>/delete
라우트에 접근할 수 있도록 ==인가==해야 할 것이다. django.contrib.auth.mixins.LoginRequiredMixin
클래스를 상속받은 View는 자동적으로 User가 로그인된 상태인지를 확인하게 된다. 만약 로그인 상태가 아니라면 404를 띄워준다.- 만약 404 대신에 로그인 페이지로 넘어가고 싶다면
settings.py
안에LOGIN_REDIRECT_URL
전역변수를 채워주면 된다. | LOGIN_REDIRECT_URL {doc}- The URL or named URL pattern where requests are redirected after login when the
LoginView
doesn’t get anext
GET parameter.
- The URL or named URL pattern where requests are redirected after login when the
- 하지만 위의 방식만 사용하면 눈치빠른 유저는 로그인을 해놓고 다른 유저의 아티클을 지울 우려가 있다.
LoginRequiredMixin
은 그냥 단지 로그인 여부만을 확인하기 때문이다. 따라서UserPassesTestMixin
을 추가로 상속받아 악의적인 URL 접근이 들어왔을 때 접근불가 403 에러를 띄워야 한다.test_func
메서드를 오버라이딩 해야하는군.
- 수정본 {GH}
redirect_field_name
#
LoginRequiredMixin
을 상속한 클래스는 해당 필드를 정의하여 로그인 이후에 어디로 갈건지를 정의할 수 있다.