✏️

4️⃣ 비밀번호 재설정 + 이메일 인증 기능 본문

PROJECT/도서 추천 서비스 | CHURY

4️⃣ 비밀번호 재설정 + 이메일 인증 기능

콩세 2023. 4. 10. 16:43

CHURY는 장고와 파이썬을 이용한 프로젝트였기에

장고 내 SMTP기능을 활용해서 비밀번호 재설정, 이메일 인증 기능을 만들었습니다.

 

django 공식문서 : https://docs.djangoproject.com/en/3.0/topics/email/

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

📍 비밀번호 재설정

 

1. Gmail 계정 만들기

비지니스 계정으로 만들면 유료라고 해서 개인 개정으로 새로 만들고

2단계 인증을 완료한 후 생성된 앱 비밀번호를 확인하고 따로 기록해둡니다.

 

 

2. Django 설정

CHURY/CHURY/settings.py에 아래 코드를 추가했습니다.

EMAIL_HOST_PASSWORD에 Gmail 앱 비밀번호를 작성합니다.

 

 

CHURY/CHURY/urls.py에 아래 코드를 추가했습니다.

모두 장고에 내장된 비밀번호 재설정시 이용할 수 있는 기능입니다.

 

 

url path를 작성하고 PasswordResetView에 들어가보면

email_template_name = "registration/password_reset_email.html" 로 되어있습니다.

초기 설정 그대로 사용하면

위와 같이 admin 페이지처럼 기본 페이지가 뜹니다.

 

 

이를 변경하려면

새로 만든 html파일을 경로에 맞게 지정해주면 됩니다.

CHURY/templates/registration 폴더 안에

비밀번호 재설정과 관련된 파일이 있고 각 폴더의 역할은 위와 같습니다.

 

 

PasswordResetView에

이렇게 필요한 페이지를 연결했습니다.

(다른 view도 부분적으로 필요한 부분만 바꿔줬습니다!)

 


 

CHURY 비밀번호 재설정 페이지 - password_reset_form.html

왼 : 가입된 이메일 입력 / 오 : 이메일 전송 완료 후

위 왼쪽 페이지에서 비밀번호 재설정하기 버튼을 누르면 입력한(가입된)메일로

비밀번호 재설정 링크가 포함된 메일이 전송됩니다.

 

 

 

 

전송된 메일에 포함된 링크를 클릭하면 왼쪽 페이지에 연결됩니다.

 

비밀번호 재설정이 완료되면 (비밀번호 저장하기 버튼을 누르면)

가운데 화면에 접속되며 이후 변경된 비밀번호로 로그인할 수 있습니다.

 

비밀번호가 변경된 이후에 같은 링크에 다시 접속할 경우 오른쪽 페이지에 연결됩니다. 

 

 


 

 

📍이메일 인증

 

위 비밀번호 재설정 기능처럼 이메일 인증 기능도 결국은 가입된 이메일로

메일이 전송되는 것 이기 때문에 비슷한 부분이 많습니다.

 

내 정보(마이페이지) > 로그인 및 보안 > 2단계 인증

2단계인증 모달창에서 이메일 전송 버튼을 클릭하면 가입된 메일로 인증 메일이 전송됩니다.

 

 

위 페이지에 해당되는 파일은 CHURY/templates/mypage/loglock.html 입니다.

이메일 전송을 위한 html 코드
'이메일 전송' 버튼 클릭 후 '전송 완료'로 변경

 

 

CHURY/mypage/urls.py

loglock.html에서 보낸 POST 요청에 pk값이 매핑되어 들어가게 되고

해당 pk값이 views.py로 넘어가면서 LogLock함수로 전달됩니다.

 

 

CHURY/mypage/views.py

LogLock 함수는 위 코드와 같고,

비밀번호 재설정때와는 다르게 이메일 제목과 내용을 따로 파일을 만들어서 연결하지 않고

함수 안에 직접 작성했습니다.

 

 

CHURY/templates/mypage/email_done.html

CHURY/mypage/urls.py

CHURY/mypage/views.py

 

email_done.html에서 보낸 POST 요청에 pk값이 매핑되어 들어가게 되고

해당 pk값이 views.py로 넘어가면서 email_done함수로 전달됩니다.

 

email_done2.html은 이메일 인증이 완료되었음을 알리는 페이지로

해당 페이지에 연결되면 데이터베이스에 해당 계정이 인증된 계정으로 저장됩니다.

> 위 코드에서  post.email_confirm = 1 부분

 

가운데 : email_done.html / 오 : email_done2.html

전송된 메일은 위 왼쪽 화면과 같고 링크에 접속하면 가운데 화면이 뜹니다.

이메일 인증 버튼을 누르면 오른쪽 인증 완료 화면에 연결됩니다.

 

 

이메일 인증이 완료된 계정은 CHURY 데이터베이스에서 확인할 수 있습니다.

MySQL > chury 데이터베이스에서 user_myinfo를 확인해보면 됩니다.

CHURY에 가입된 계정 중 이메일 인증이 완료된 계정만 조회되는 것을 확인할 수 있습니다.