회원 가입 - 이메일을 입력 받아야 됨
회원정보를 DB에 저장 - is_active를 0으로 저장
is_active로 0으로 지정해주면 로그인을 할 수 없는 상태로 됨 (ex 휴면계정처럼)
(실제 회사같은 경우에는 회원탈퇴를 해도 혹시모를 상태에 대비해 저 active를 비활성화 시켜주는경우도 많음, delete하지않고)
메일 전송 - 파이썬 프로그램이 메일서버에 접속해서 메일에 전송 (메일서버가 필요함)
서버→클로 보낼때 사용자정보나 등등으로 만든 랜덤한 토큰값과 함께 전송하고 서버에서 저장해놓음, 밑에서 사용자가 링크를 확인했을 때 토큰값이 같아야만 허용
사용자가 받은 메일 - is_active를 1로 변경해주는 view함수를 호출하는 URL이 포함
signup에서 post일때 valid일때 save commitFalse다음에
user.is_active = False 추가
allauth 설치
pip install django-allauth
AbstractBaseUser -모델,인증방법까지 다 커스텀
AbstractUser - 모델정도만 바꾸기
이메일인증 안하면 로그인못하도록 할 것
settings.py 설정 추가
...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites', # 여러사이트들 동시에 운영할수있음. 지금프로젝트는 1번사이트라고 설정(밑에서)
'accounts',
'allauth',
'allauth.account',
'allauth.socialaccount',
]
AUTH_USER_MODEL = 'accounts.User'
SITE_ID=1
AUTHENTICATION_BACKENDS = {
# Needed to login by username in Django admin, regardless of `allauth`
'django.contrib.auth.backends.ModelBackend',
# `allauth` specific authentication methods, such as login by e-mail
'allauth.account.auth_backends.AuthenticationBackend',
}
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
ACCOUNT_AUTHENTICATION_METHOD = 'email' # 유저네임은 말고 email로만 인증 할것임
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_EMAIL_VERIFICATION = 'mandatory' #none, optional(default, 보내긴하는데 인증하지않아도), mandatory(이메일인증받지않으면 로그인할수없다)
ACCOUNT_CONFIRM_EMIAL_ON_GET = True
...
https://django-allauth.readthedocs.io/en/latest/installation.html 참조
urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('allauth.urls'))
]
여기서 앱 비밀번호를 설정 (장고가 쓸 거)
settings.py에서 이렇게 추가
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = '587'
EMAIL_HOST_USER = 'xxxxxxx@xxxxxx' # 내 이메일주소
EMAIL_HOST_PASSWORD = 'xxxxxxxxxxxxxx' #발급한 앱비밀번호
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 1
ACCOUNT_EMAIL_SUBJECT_PREFIX = '[이메일 인증]' #이메일 제목앞에 붙일내용
sign up 하면
만약 메시지 보낼때 txt 바꾸고싶으면 공식문서의 내용처럼 templates밑에 저런 경로의 폴더를만든다
~~message.txt
안녕하세요 {{ user }} 회원님,
회원 가입 해주셔서 감사합니다.
아래 링크를 통해 절차를 진행 해주세요.
{{ activate_url }}
~~subject
[내 사이트] 이메일 인증