작정하고 Django (27) - Authentication 인증시스템 구축

김의찬·2023년 5월 13일

작정하고 Django !

목록 보기
27/45

시작하기 앞서 코드 수정

기존에 UpdateView와 DeleteView 에는 context_object_name을 지정하지 않았는데
DetailView 와 마찬가지로 context_object_name = 'target_user' 를 지정해준다.

또한 ,

delete.html 과 update.html 에서
pk=user.pkpk=target_user.pk 로 수정한다.

또한 ,

urls.py 에서 2번째 path가 기존에는 account 였는데 accounts 로 수정한다.

-> 나중에 쓰일 함수 형태로 쓸 예정

본격적인 Authentication 인증 시스템 구축

기존에는 아무나 우리가 만든 hello_world 에 접근하여 글을 쓸 수 있는 문제점이 존재했다.

이를 해결하기 위해 "인증" 이라는 것을 이용할 예정이다.


if request.user.is_authenticated 를 사용하여 인증 과정 절차를 거친다.

만약 인증이 성공한다면 기존 수행대로 진행하고, 인증을 실패했다면 login으로 유도하는 return값을 주게 된다.

accounts/hello_world 를 페이지로 들어가려고 하면,
인증이 되어있지 않기 때문에

login 창으로 넘어가게 되는 것을 볼 수 있다.

-> 이것을 account 에도 모두 적용시켜야한다.

AccountUpdateView 와 AccountDeleteView에 똑같이 적용
get 과 post 메소드를 정의하고 계정이 인증되었다면 기존대로, 아니라면 login으로 향하는 코드를 작성한다.

-> 한가지 문제점 존재

여러가지 계정이 있을 경우 하나의 계정으로 로그인 한 뒤,

다음과 같이 update/(계정번호) 를 입력하면 다른 사람의 계정을 변경할 수 있는 상황이 발생하고, 또한 다른사람의 계정을 탈퇴할 수도 있는 상황이 발생한다.

이를 해결하기 위해서

<코드수정>

if self.request.user.is_authenticated and self.get_object() == self.request.user: 현재 사용되고 있는 user object , urls 에서 받는 pk에 맞는 user의 객체를 가져오는 것이 지금 request를 보내고 있는 user와 같은지 확인.

return HttpResponseForbidden() 아닐 시 금지된 곳에 접근된 화면을 보여주는 코드.

3번 계정 (euichan) 으로 1번계정(test123)으로 접근했을 때 금지되는 화면.

profile
김의찬입니다

0개의 댓글