오늘은 비밀번호 찾기 기능을 구현해보려한다.
비밀번호는 회원가입과 동시에 DB에도 salt값으로 저장되므로 비밀번호를 직접 찾아주는것은 불가능하다.
따라서 비밀번호 찾기를 구현한다면 비밀번호를 초기화 하는것과 같은 의미가 된다.
본인은 해당 글을 보고 실습을 진행하였다.
부분마다 개인 편차가 있으므로 상황에 맞게 진행하면 된다.
그럼 시작해보자!
Email 전송
# 메일을 호스트하는 서버
EMAIL_HOST = 'smtp.gmail.com'
# gmail과의 통신하는 포트
EMAIL_PORT = '587'
# 발신할 이메일
EMAIL_HOST_USER = '(#본인 아이디)@gmail.com'
# 발신할 메일의 비밀번호
EMAIL_HOST_PASSWORD = '구글비밀번호'
# TLS 보안 방법
EMAIL_USE_TLS = True
# 사이트와 관련한 자동응답을 받을 이메일 주소
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
우선 settings.py에 메일을 보내주는 메일서버 환경을 갖춰야 한다.
그리고 비밀번호를 변경해줄 페이지 실행시킬 url을 작성해주자
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views
path('password_reset/', auth_views.PasswordResetView.as_view(), name="password_reset"),
path('password_reset_done/', auth_views.PasswordResetDoneView.as_view(), name="password_reset_done"),
path('password_reset_confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(),name="password_reset_confirm"),
path('password_reset_complete/', auth_views.PasswordResetCompleteView.as_view(), name="password_reset_complete"),
모두 Django에 내장된 비밀번호 초기화시 이용가능한 기능들이다. url을 작성하고 기능들을 살펴보면 Password뷰들 모두 화면에 보여주는 템플릿 경로가 본인 Project의 Template파일 내에 registration으로 되어있다. 템플릿을 그냥 건들지 않으면
이처럼 admin페이지 처럼 뜰것이다. 하지만 사용자들이 일반 웹사이트에서 이런 화면을 마주보면 당황할 터이니 우리의 템플릿 파일에 registration 디렉토리를 만든후 경로에 맞게 html파일을 작성해주면 될것이다.본인 메일 작성후 send를 하면 해당 메일로 초기화 링크가 보내진다. 이후 접속해서 Reset을 진행하면 된다.
내가 실습을 보고 진행한 게시글에선 passwordResetView를 상속받아 커스텀해서 이용했다. 본인은 그정도 기능까지는 필요가 없기에 딱 이메일 입력 후 비밀번호 초기화 기능만 이용하려 한다.
나는 그냥 테스트 할때 구글 비밀번호를 적어서 실행했는데
나중에 에러가 발생했다.
SMTPAuthenticationError at /password_reset/
(533, b'5.7.8 Username and Password not accepted....)
비밀번호가 맞지 않다는것 같은데 .. 아!
보통 구글 로그인은 2단계 인증으로 되어있다. 나 또한 마찬가지로 아무데서나 한번에 로그인 불가하다. 아마 이때문에 Django에서도 비밀번호가 있어도 접근하지 못한것 같다.
그렇다면 우리가 이용해야 할것은 구글 앱 비밀번호다
구글 앱 비밀번호 설정이란?
2차 인증이 걸린 계정에서 한번에 접근할수 있게 도와주는 기능같다
그냥 하라는대로 따라하면 앱 비밀번호가 생성 된다.
다음과 같이 생성된 16자리 비밀번호를 아까 settings.py의 구글 비밀번호에 적어주면 정상적으로 작동 될것이다.
감사합니다.