ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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_num
                auth_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.data
           
            try:
                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
Designed by Tistory.