Skip to content

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}
  • 하지만 위의 방식만 사용하면 눈치빠른 유저는 로그인을 해놓고 다른 유저의 아티클을 지울 우려가 있다. LoginRequiredMixin은 그냥 단지 로그인 여부만을 확인하기 때문이다. 따라서 UserPassesTestMixin을 추가로 상속받아 악의적인 URL 접근이 들어왔을 때 접근불가 403 에러를 띄워야 한다.
    • test_func 메서드를 오버라이딩 해야하는군.
  • 수정본 {GH}

redirect_field_name#

LoginRequiredMixin을 상속한 클래스는 해당 필드를 정의하여 로그인 이후에 어디로 갈건지를 정의할 수 있다.