Sending email Verification Code

Woo Hwukjun·2020년 12월 26일
0
post-thumbnail
  1. 프로젝트에서 settings.py에 이동한다
EMAIL_HOST = my_settings.EMAIL_HOST
EMAIL_PORT = my_settings.EMAIL_PORT
EMAIL_HOST_USER = my_settings.EMAIL_HOST_USER
EMAIL_HOST_PASSWORD = my_settings.PASSWORD
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
  1. my_settings.py에서 추가로 넣어야하는 정보이다 왜냐하면 gitignore로 숨겨야 노출이 안되기때문이다.
PASSWORD = '1q2w3e4r!@#$'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = '587'
EMAIL_HOST_USER = 'dongmyofriends@gmail.com'
  1. models.py에 emailcheck이라는 테이블을 만들어야한다. 유저에 저장을할것은 모든 정보가 들어왔을때 저장을해야한다. 그래서 만약 이메일과 코드를 받고 유저테이블에 저장하면 예를들어 그뒤에 추가정보를 저장하지않으면 그 row는 그냥 그렇게 남게된다. 그래서 emailcheck라는 테이블에 저장을 임시로 한뒤 코드를 사용했을때에 지워지도록 만들었다.
# put it on top:
from django.core.mail import EmailMessage

class EmailCheckView(View):
    def post(self, request):
        try:
            data = json.loads(request.body)
            email = data.get('email', None)           
            random_token = random.randint(10000, 100000)
            # 이메일체크테이블에 저장
            EmailCheck.objects.create(
                email = email,       
                random_token = random_token
            )
            mail_subject = "[DM] 회원가입 인증 메일입니다."
            content = f"이메일 인증에 성공하셨습니다.\n\n인증번호는 {random_token}"
            emailsend = EmailMessage(mail_subject, content, to=[data['email']])
            emailsend.send()
            return JsonResponse({'email': 'SENT'}, status=201)  
        except KeyError:
            return JsonResponse({'message': 'KEY_ERROR'}, status=400)

class VerificationCodeView(View):
    def post(self, request):
        try:
            data = json.loads(request.body)

            if EmailCheck.objects.filter(email=data['email']).exists():
                email = EmailCheck.objects.get(email = data['email'])
                if email.random_token == data['random_token']:
               	   # verification코드를 사용한뒤에 이메일과 코드는 테이블에서 지운다.
                    email.delete()
                    return JsonResponse({'code': 'ACCEPT'}, status=200)
                return JsonResponse({'message': 'DENY'}, status=400)
            return JsonResponse({'message': 'DENY'}, status=400)   
                 
        except KeyError:
            return JsonResponse({'message': 'KEY_ERROR'}, status=400)
profile
미래 개발자

0개의 댓글