Django 이메일 확인 구현
3929 단어 django
Django는 일반적인 웹사이트의 거의 모든 사용자 관리 로직을 즉시 제공합니다. 사용자 로그인, 로그아웃, 비밀번호 변경, 비밀번호 재설정, 이 모든 것은 새 프로젝트를 시작하는 즉시 준비됩니다.
하지만 "거의"라고 말한 이유는 Django에서 제공하지 않는 거의 모든 웹사이트에 필요한 한 가지가 있기 때문입니다. 바로 이메일 확인입니다. 하지만 두려워하지 마세요. 기능이 즉시 제공되지 않을 수 있지만 필요한 모든 구성 요소가 있습니다.
토큰
이메일 확인 흐름에서 가장 중요한 부분은 확인 토큰입니다. 이 토큰의 목적은 사용자의 현재 상태를 인코딩하는 것입니다. 사용자가 비활성 상태인 경우에만 유효하기를 원합니다. 사용자가 활성화되면 토큰은 더 이상 유효하지 않습니다.
고맙게도 Django는 비밀번호 재설정 이메일을 보낼 때 유사한 토큰을 생성합니다. 이 클래스를 재사용하여 이메일 활성화를 위한 토큰도 만들 수 있습니다.
유일한 차이점은 토큰을 생성하는 데 사용하는 요소입니다. 사용자가 아직 활성화되지 않은 경우에만 토큰이 유효하기를 원하므로
user.is_active
를 포함합니다.class EmailVerificationTokenGenerator(PasswordResetTokenGenerator):
def _make_hash_value(self, user, timestamp):
return (
str(user.is_active) + str(user.pk) + str(timestamp)
)
email_verification_token = EmailVerificationTokenGenerator()
email_verification_token_generator.py
확인 이메일
다음 단계는 확인 이메일을 보내는 것입니다.
활성화 URL을 구성하려면 다음 세 가지가 필요합니다.
class RegistrationView(FormView):
# [...]
def _send_email_verification(self, user: CustomUser):
current_site = get_current_site(self.request)
subject = 'Activate Your Account'
body = render_to_string(
'emails/email_verification.html',
{
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': email_verification_token.make_token(user),
}
)
EmailMessage(to=[user.email], subject=subject, body=body).send()
registration.py
<div>
<a href=
"http://{{ domain }}{% url 'activate' uidb64=uid token=token %}">
Please activate your account</a>
</div>
email_verification.html
사용자 활성화
마지막 단계는 사용자를 활성화하는 것입니다. 이전 단계에서 수행한 역 프로세스를 수행합니다.
EmailVerificationTokenGenerator
를 사용하여 토큰이 여전히 유효한지 확인토큰이 유효하면 사용자가 아직 활성화되지 않았음을 의미하며
is_active
를 True
로 설정하고 저장합니다. 이 시점부터 토큰은 더 이상 유효하지 않습니다. 따라서 템플릿에 적절한 메시지를 표시하기 위해 이 링크를 다시 클릭하는 경우를 처리해야 합니다.urlpatterns = [
path('activate/<uidb64>/<token>',
ActivateView.as_view(),
name='activate'),
# [...]
]
urls.py
class ActivateView(View):
def get_user_from_email_verification_token(self, token: str):
try:
uid = force_str(urlsafe_base64_decode(self))
user = get_user_model().objects.get(pk=uid)
except (TypeError, ValueError, OverflowError,
get_user_model().DoesNotExist):
return None
if user is not None \
and \
email_verification_token.check_token(user, token):
return user
return None
def get(self, request, uidb64, token):
user = self.get_user_from_email_verification(uidb64, token)
user.is_active = True
user.save()
login(request, user)
return redirect('registration_successful')
activate.py
바라건대 이것은 Django 프로젝트에서 이메일 확인을 구현하는 빠르고 간단한 방법이었습니다.
즐거운 코딩하세요!
Reference
이 문제에 관하여(Django 이메일 확인 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rockandnull/implementing-django-email-verification-44of텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)