- 프로젝트에서 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
- my_settings.py에서 추가로 넣어야하는 정보이다 왜냐하면 gitignore로 숨겨야 노출이 안되기때문이다.
PASSWORD = '1q2w3e4r!@#$'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = '587'
EMAIL_HOST_USER = 'dongmyofriends@gmail.com'
- 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)