-
[DRF- User& sms인증] 아이디 찾기한이음 프로젝트 2023. 9. 12. 23:26
전 게시글에서 sms 인증하는 것을 구현했는데 이번에는 인증을 기반으로 한 id찾기 기능을 구현하려고 한다.
1. view.py 구현
2. urls.py 구현
3. postman으로 실습
1.1 view.py 구현( 아이디 찾기 인증번호 보내기)
class UserIdLostView(APIView):permission_classes = (AllowAny,)def post(self,request):data = json.loads(request.body)try:user = User.objects.get(username=data['name'], phone=data['phone'])auth_num = random.randint(1000, 10000) # 인증번호 생성 (1000~9999)# 인증번호를 auth_sms 테이블의 해당 번호의 auth 열에 저장auth_sms = Auth.objects.get(phone=user.phone)auth_sms.auth = auth_numauth_sms.save()sms_sender = SmsSendView() #인증번호 클래스sms_sender.send_sms(phone =user.phone, auth = auth_num) #인증번호 전송 함수 호출response_data = {"message":'인증번호를 전송했습니다.'}return Response(response_data, status=status.HTTP_200_OK)except User.DoesNotExist: #해당하는 유저가 없다면
response_data = {'auth': ["이름 혹은 폰번호를 다시 확인해주세요."]}return Response(response_data, status=status.HTTP_404_NOT_FOUND)-> 해당 코드는 요청으로 name(사용자 이름), phone(휴대폰 번호)를 준다. 그리고 Auth모델(테이블)에는 phone,username,auth,created_at,updated_at으로 이뤄져있으며,phone넘버와 auth_num을 값을 phone,auth의 열에 값을 삽입한다.
auth 모델은 아래와 같다.
class Auth(models.Model):phone = models.CharField(max_length=11, primary_key=True)username = models.TextField()auth = models.IntegerField(blank=True)created_at = models.DateTimeField(auto_now_add=True, blank=True)updated_at = models.DateTimeField(auto_now = True, blank=True)
class Meta:db_table = 'auth_sms'1.2 view.py 구현 ( userId 찾기 인증 후 값변환 api)
class UserIdRecoveryView(APIView):def post(self, request):data = request.datatry:user = User.objects.get(username=data['name'], phone=data['phone'])auth = data['auth']auth_record = Auth.objects.get(phone=user.phone) #해당 번호로 auth테이블에서 가져온다.if auth_record.auth == auth:response_data = {'message': "인증이 완료되었습니다.","userIdx" : user.userIdx, "users_id": user.users_id}return Response(response_data, status=status.HTTP_200_OK)else:response_data = {'auth':['인증번호가 일치하지 않습니다.']}return Response(response_data, status=status.HTTP_400_BAD_REQUEST)
except User.DoesNotExist:response_data = {'auth':['해당 유저의 정보를 찾을 수 없습니다.']}return Response(response_data, status=status.HTTP_404_NOT_FOUND)except Auth.DoesNotExist: #해당 휴대폰 번호에 대한 인증 정보가 없습니다response_data = {'auth':['휴대폰 번호를 다시 확인하세요.']}return Response(response_data, status=status.HTTP_404_NOT_FOUND)-> name,과 phone과 auth(인증번호)를 post형식으로 요청값으로 보내고,
- if auth_record.auth == auth : 는 가져온 행의 auth 값이 내가 작성한 auth와 같은지 판단. 없다면, 인증번호 불필치
2. urls.py 구현
path('users/uid-lost',views.UserIdLostView.as_view()),path('users/uid-recovery',views.UserIdRecoveryView.as_view()),- users/uid-lost : 아이디 찾기 인증번호 보내기
- users/uid-recovery : userId 찾기 인증 후 값변환 api
3. postman 실습
3.1 - users/uid-lost : 아이디 찾기 인증번호 보내기
이렇게 보내면, 해당 번호로 인증번호가 전송이 됩니다.
3.2 - users/uid-recovery : userId 찾기 인증 후 값변환 api
'한이음 프로젝트' 카테고리의 다른 글
[DRF - SMS] 네이버 SMS 문자 인증 구현하기 (1) 2023.09.05 [DRF - User] 로그인 API (0) 2023.08.21 [DRF - User] 회원가입 API (0) 2023.08.21 [DRF - User] 커스텀 User -1 (0) 2023.08.21 DRF 공부( python) (0) 2023.07.31