용기러기's Coding World

Yongki's Do it Django(5) - 비밀번호 변경 기능 구현하기 본문

용기러기's Django

Yongki's Do it Django(5) - 비밀번호 변경 기능 구현하기

yongkis 2020. 4. 13. 00:54

안녕하세요 :)

 

오늘은 로그인한 유저가 비밀번호를 변경할 수 있도록 해보겠습니다 

 

간략하게 오늘의 과정을 살펴보면,

일단, 저희는 비밀번호를 User테이블에 모아 두고는 있지만,

앞에 회원가입 기능을 만들 때 봤듯이 운영자도 클라이언트들의 비밀번호를 이렇게 암호화한 상태로 밖에 볼 수 없음을 기억하시나요??

그렇다면, 이 비밀번호를 클라이언트가 원하는 새로운 비밀번호로 바꾸려면 어떻게 할까요?

기존의 모델의 객체의 인수를 바꾸는 것은 그렇게 어렵지 않았는데 말이죠.

예를 들어, 기존 객체의 인수를 바꾸려면 

selected_object=models.exampleModel.objects.get(id=특정 객체의 아이디 값)

이렇게 변경을 원하는 객체를 받아온 다음에 예를 들어, name 필드를 바꾸고 싶다면?

selected_object.name="변경을 원하는 값"

해주면 됐습니다. 

 

그러나, user의 비밀번호를 설정할 때는 다른 방법이 필요합니다 :)

바로 set_password 를 이용하는 방법인데요

어떻게 사용하는지 본격적으로 알아보겠습니다 :)

일단 저는 account링크를 누르면 

다음과 같은 화면으로 이어지도록 했는데요(허접한 디자인 이해해주세요..;)

저렇게 비밀번호 쪽에만 input을 받도록 해봤습니다.

바꾸고자 하는 비밀번호를 입력하고 변경을 누르면 말 그대로 변경! 되는 것이죠.

그럼 저 뒤에는 어떤 설계가 되어있는지 백엔드 쪽을 살펴보도록 할게요 

저는 changePassword의 약자로 chPsw라는 함수를 만들었는데요(제 맘입니다.. 그렇다고요..ㅎㅎ).

여기서는 순서대로

현재 로그인 정보 주머니(Cookie를 말하는 것이라고 앞 챕터에서 말씀드렸습니다)에 담긴

유저 객체를 먼저 user라는 변수에 할당해줬습니다.

그다음에 변경할 비밀번호 input으로 받은 값을(form method="POST"로 받은)

new_password라는 변수에 할당해줬습니다.

그 다음에 앞에서 말한 

set_password()를 이용해서 user.set_password(new_password) 라고 코딩을 했고, 그에 따라 

제가 가져온 객체의 비밀번호가 제가 원하던 것으로 바뀌었습니다. 

그러면 이제, 저장을 해주고 끝난 것처럼 보입니다. 

 

그러나, 이때, 바꾼 정보가 비밀번호가 아니라 예를 들어, 이메일이라 했을 때

쿠키 정보를 바꿔야 할 필요가 있습니다.

뭔 말인가 하면, 저희는 비밀번호를 바꾸고 저장을 했지만,

쿠키 속에 담긴 저희들의 비밀번호는 여전히 변경 이전의 비밀번호입니다.

이때, 이전의 비밀번호를 가진 쿠키라도 로그인 상태는 유지가 되지만,

만약 그 쿠키 속 정보가 비밀번호가 아닌 실시간으로 계속 사용하는 정보라고 했을 때,

예를 들어, 롤(?)에서 티어가 변경돼서 티어를 변경했는데, 쿠키 속 롤 티어는 여전히 브론즈(?)라고 해보면...

그만큼 슬픈 일이 없습니다(이상한 비유 죄송합니다;)

 

그렇기에 만약 필요하다고 생각이 된다면 쿠키를 다시 만들어줄 필요가 있습니다:) 

그래서 뒷부분에 쿠키를 다시 setting 해줬습니다 

 

그럼 이렇게 로그아웃 기능까지 살펴봤는데요, 1,2,3,4,5 편까지 오면서 짤막하게 봤지만,

회원가입-> 로그인(+로그인 상태 유지)-> 비밀번호 변경 -> 로그아웃 까지 살펴볼 수 있었습니다.

다음 챕터에서는 로그인 field들을 커스텀해서 나만의 User모델을 만들어보도록 하겠습니다 :)

 

여태까지 고생하셨습니다 :)