dboard - email 인증 활성화
구글로그인은 프로덕션으로 바꾸려면 심사도 받고 귀찮은게 있어서, 일단 이메일 가입을 활성화 해두어 보기로 했다. 경험상 이메일 가입은 보안상 문제라거나, 운영상 문제라거나 여러가지 곤란한 이슈들이 생기니 가급적 없애는게 좋긴 하겠지만 지금이야 뭐 괜찮아.
1. urls 에 소셜로그인을 위해 필요한 패턴만 추가해 두었는데, allauth.urls를 모두 가져오도록 수정
2. site-packages 를 뒤져서 templates/account 를 내 프로젝트 디렉토리의 templates/account 로 복사해온다
* 내 프로젝트 디렉토리를 먼저 찾으므로, 프로젝트 디렉토리에서 수정한게 적용된다.
3. 이제 가져온 템플릿들을 수정하면 된다. 기능상으로 보면,
* 이메일 가입, 로그인: signup.html, login.html
* 가입시 이메일 인증: verification_sent.html, email_confirm.html
* 비밀번호 변경: password_change.html
* 비밀번호 분실시 리셋: password_reset*.html
들이다. 일단 제일 위에 {% extends 'account/base.html' %} 부터 내 베이스파일로 바꿔주면 내 템플릿 안에 렌더링 되는걸 볼 수 있다. url 들 확인은 Debug=True 로 해두고 http://127.0.0.1:8000/account/ 를 열어보면 에러메시지와 함께 url 패턴들을 쫙 보여준다. (왜 Debug=True 로 프로덕션 올리면 안되는지 Okay?) 뚝딱뚝딱 고쳐보자...
4. 필요한 링크들을 내 템플릿 여기저기에 넣어준다.
* 구글로그인 버튼 옆에 이메일 로그인 화면으로 가는 링크를 넣는다. {% url 'account_login' %}
* 개인정보 화면에 비밀번호 변경화면으로 가는 링크를 넣는다. {% url 'account_change_password' %}
* 가입 화면, 비밀번호 리셋화면 등등 기존 템플릿들 보면 쉽게 알 수 있다.
5. SMTP 설정을 넣어준다. 내가 개인적으로 돌리는 메일서버가 없기 때문에 구글님의 도움을 받았다.
* 적당한 이름의 gmail 계정 생성 (noreply머시기머시기@gmail 이런걸로 했다)
* 구글 계정 설정페이지로 가서 2FA 활성화
* 2FA 활성화 페이지 제일 밑에 앱 비밀번호 생성하기
* 하나 생성하고 화면에 뜬 앱 비밀번호를 적어둔다
* django 설정파일에 smtp 설정을 넣는다. 대강 아래와 같은 설정. USERNAME, PASSWORD 를 적당히 바꿔준다.
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST_USER = 'USERNAME'
EMAIL_HOST_PASSWORD = 'PASSWORD'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
from django.views import defaults as django_default_views
from allauth.account import views as allauth_views
...
urlpatterns = [
...
path('accounts/email/', django_default_views.page_not_found, {'exception': Exception()}),
path('accounts/password/change/', allauth_views.PasswordChangeView.as_view(template_name='account/password_change.html', success_url='/myinfo'), name='account_change_password'),
...
]
7. done!