2021.12.19 - [Study/Django] - [Django] 장고 유저 기능 구현하기 #9 ( 회원가입 정보 유효성 검사)
지금 만든 유저 기능에서 회원가입을 한 후 터미널을 잘 보면 아래 사진과 같이 이메일을 인증해달라는 로그가 나옵니다.
이번 게시글에서는 이 이메일 인증에 대해 적어보겠습니다.
이메일 인증 설정 ( ACCOUNT_EMAIL_VARIFICATION )
이메일 인증 설정을 담당하는 ACCOUNT_EMAIL_VARIFICATION 은 3가지 설정이 있습니다.
1. mandatory : 이 옵션은 이메일 인증을 완료하기 전까지 로그인을 할 수 없게 됩니다.
2. optional : 이 옵션은 이메일 인증은 발송되지만 이메일 인증을 하지 않아도 로그인할 수 있습니다.
3. none : 이 옵션은 이메일 인증이 필요 없고, 아예 인증 메일이 보내지지 않습니다.
ACCOUNT_EMAIL_VARIFICATION의 default 값은 optional 입니다.
사용하려면 settings.py 에 ACCOUNT_EMAIL_VARIFICATION = 옵션 값으로 사용하면 됩니다.
저는 optional을 사용할 거기 때문에 따로 설정은 안 해주겠습니다!
이메일 인증 확인을 링크만 누르면 바로 되게 하기!
현재 위처럼 설정한 후, 인증 이메일 주소로 접속하게 되면, 확인을 받는 사이트가 나오는데요.
이때 이 확인을 따로 하지 않고 링크를 누른다면 바로 확인이 되는 것으로 만들기 위해 설정을 하나 추가하겠습니다.
# settings.py
ACCOUNT_CONFIRM_EMAIL_ON_GET = True
위처럼 settings.py 에 ACCOUNT_CONFIRM_EMAIL_ON_GET = True 를 주게 되면 인증 링크를 누른 후 바로 홈페이지로 가게 됩니다.
이때, 인증 링크를 클릭했을 때, 인증 링크를 눌렀을 때, 홈페이지가 아닌 인증 완료 페이지로 이동시켜보겠습니다.
# 프로젝트폴더/urls.py
from django.contrib import admin
from django.urls import path, include
from django.views.generic import TemplateView
urlpatterns = [
# admin
path('admin/', admin.site.urls),
# coplate
path('', include('coplate.urls')),
# allauth
path("email-confirmation-done/",
TemplateView.as_view(template_name="coplate/email-confirmation-done.html"),
name="account_email_confirmation_done"),
path('', include('allauth.urls')),
]
{# email-confirmation-done.html #}
이메일 인증이 완료되었습니다.
{% if user.is_authenticated %}
<a href="{% url 'index' %}">홈으로 이동</a>
{% else %}
<a href="{% url 'account_login' %}">로그인 하기</a>
{% endif %}
일단 프로젝트 폴더에 가서 path를 설정해줘야 합니다.
일단 저는 인증이 완료됐다는 페이지를 렌더 해주기만 되기 때문에 인증 완료 페이지 렌더 기능을 넣으면 되는데요.
Django에서는 단순히 어떠한 템플릿을 렌더 할 땐 제네릭 뷰를 사용할 수 있는데요.
그 제네릭 뷰에서 템플릿 뷰를 사용하면 됩니다. 템플릿 뷰의 장점은 따로 뷰를 정의하지 않고도 사용할 수 있다는 점입니다.
TemplateView를 사용하기 위해 from django.views.generic import TemplateView 로 Templateview를 import 해줍니다.
그 후 렌더 할 페이지인 email-confirmation-done 페이지를 만들어 줍니다.
이때 사용자가 로그아웃 된 상태에서 이메일 인증을 클릭할 수도 있기 때문에, 만약 유저가 로그인이 되어 있을 경우에는 인증을 완료시켜주고, 홈으로 이동하고 만약 로그인이 되어 있지 않다면 인증을 시켜준 후 로그인 페이지로 이동시켜주겠습니다.
그 후 settings.py에 이메일 인증을 하고 페이지를 리다이렉트 해주는 설정을 추가해줘야 합니다.
# settings.py
#ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = "urls.py에서 설정한 이름"
# 유저가 인증을 완료했을때 연결할 URL
#ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL = "urls.py 에서 설정한 이름"
# 로그인 하지 않은 사람이 인증을 했을때 연결할 URL
ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = "account_email_confirmation_done"
ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL = "account_email_confirmation_done"
위처럼 설정을 추가해주면 되지만 저는 account_email_confirmation_done.html 에서 로그인이 되어있을 때와 안되어있을 때를 모두 추가해주었기 때문에 한 URL로 적었습니다.
'Study > Django' 카테고리의 다른 글
[Django] allauth URL 및 세팅 (0) | 2021.12.22 |
---|---|
[Django] 장고 유저 기능 구현하기 #11 ( 비밀번호 관리 기능) (0) | 2021.12.22 |
[Django] 장고 유저 기능 구현하기 #9 ( 회원가입 정보 유효성 검사) (0) | 2021.12.19 |
[Django] 장고 유저 기능 구현하기 #8 (닉네임 필드 추가하기) (0) | 2021.12.18 |
[Django] 장고 유저 기능 구현하기 #7 (로그인 기억하기) (0) | 2021.12.17 |