본문 바로가기
클라우드/AWS

장고와 Redis 연결 후 사용하기(2) - 이메일 인증(gmail사용)

by 빈스터디 2023. 3. 24.

1. 장고에서 회원가입 구현 코드를 수정한다. 

def signup(request):
    if request.method == 'POST':
        signupForm = SignupForm(request.POST)
        if signupForm.is_valid():
            newUser = signupForm.save(request)

            return redirect('/user/login')
    else :
        signupForm = SignupForm()
    return render(request, 'user/signup.html',
                        {'signupForm' : signupForm})

 

 

2. 장고에 allauth를 설치한다.

pip install django-allauth

 

 

3. settings.py의 INSTALLED APP에 다음을 추가한다.

 

 

4. 구글 계정 관리 > 보안 > 2단계 인증 추가 > 앱비밀번호 설정

 

 

5. Gmail > 설정 > 모든 설정 보기 > POP/IMAP 설정 > 변경사항 저장

 

 

6. settings.py에 아래의 코드를 추가한다.

*allauth 공홈에서 제공하는 코드 참고

# AUTH_USER_MODEL = 'user.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.smtp.EmailBackend'

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = '587'
EMAIL_HOST_USER = '[gmail 계정(~@~)]' 
EMAIL_HOST_PASSWORD = '[앱 비밀번호 입력]' 
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 1
ACCOUNT_EMAIL_SUBJECT_PREFIX = '[이메일 인증]' 
    
ACCOUNT_AUTHENTICATION_METHOD = 'email' 
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_EMAIL_VERIFICATION = 'mandatory' 
ACCOUNT_CONFIRM_EMIAL_ON_GET = True

 

 

7. urls.py에 allauth의 경로를 추가한다.

path('', include('allauth.urls'))

 

 

8. '[서버주소]/signup/'에 접속하여 회원가입 진행

 

> 회원가입 페이지

 

 

> Sign Up을 누르면 다음과 같이 메일이 전송됐다고 뜬다.

 

 

> 메일이 왔다.

 

 

> 인증하라는 페이지 링크를 누르면 이렇게 확인 페이지가 뜬다.

 

 

> DB를 확인하면 아래와 같다.

인증을 하지 않은 상태면, verified가 0인데, 인증하고나면 1로 바뀐다.

 

인증 안했을 때,

 

 

인증 했을 때,