본문 바로가기

Web Programming/Django

Django 유저 Accounts 비밀번호 재설정

유저들이 비밀번호를 잊어버렸을 때 처리할 수 있는 다양한 방법 중에 일반적으로 재설정 이메일을 많이 활용한다. 

그래서 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