유저들이 비밀번호를 잊어버렸을 때 처리할 수 있는 다양한 방법 중에 일반적으로 재설정 이메일을 많이 활용한다.
그래서 User 모델에 email을 저장해두고
서버에 해당 이메일이 있을 경우 재설정 이메일을 발송하여 token 검사 후 실제 재설정이 가능하도록 구현하였다.
먼저 User 모델에 Email도 함께 저장한다.
views.py 중
...
user = User.objects.create_user(username=request.POST['username'], email=mail_to, password=request.POST['password1'])
그리고 Accounts/views.py 에 password_reset 클래스를 작성한다.
class MyPasswordResetView(PasswordResetView):
success_url=reverse_lazy('login')
template_name = 'accounts/password_reset_form.html'
email_template_name = 'accounts/password_reset.html'
mail_title="비밀번호 재설정"
def form_valid(self, form):
return super().form_valid(form)
class MyPasswordResetConfirmView(PasswordResetConfirmView):
success_url=reverse_lazy('login')
template_name = 'accounts/password_reset_confirm.html'
def form_valid(self, form):
return super().form_valid(form)
Accounts/urls.py에 url을 추가해준다.
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views
urlpatterns = [
...
path('password_reset/', views.MyPasswordResetView.as_view(), name='password_reset'),
path('reset/<uidb64>/<token>/', views.MyPasswordResetConfirmView.as_view(), name='password_reset_confirm'),
]
템플릿 파일을 작성해준다.
Accounts/templates/accounts/password_reset.html
이메일 발송 내용
Accounts/templates/accounts/password_reset_form.html
<h1>Forgot your password?</h1>
<p>Enter your email address below, and we'll email instructions for setting a new one.</p>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Send me instructions!">
</form>
Accounts/templates/accounts/password_reset_confirm.html
<h1>Set a new password!</h1>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Change my password">
</form>
'Web Programming > Django' 카테고리의 다른 글
django crontab 장고 크론탭 (3) | 2020.03.22 |
---|---|
Ajax 통신하기 (0) | 2020.02.29 |
Static 추가하기 (0) | 2020.02.16 |
Django 회원가입 이메일 인증(SMTP) (2) | 2020.02.09 |
Like 좋아요 모델 추가하기 (1) | 2019.06.25 |