MM們
2023-07-29 16:32:10
我有一個簡單的聊天應用程序,其中的身份驗證與 Whatsapp 完全一樣獲取電話號碼=>如果不存在則創建其他號碼跳過=>發送驗證碼并將其設置為用戶模型中的“phone_code”字段=>最后刪除“phone_code”(如果經過驗證)該應用程序是在 React Native 中構建的,并以 Rest 框架作為 API,我對此很陌生,并且我正在努力在沒有密碼的情況下獲取身份驗證令牌。我使用 djangorestframework-simplejwt我的寄存器視圖:@api_view(('POST',))def register(request): if request.method == 'POST': serializer = UserSerializer(data=request.data) if not serializer.is_valid(): if 'is not valid' in serializer.errors['phone_number'][0]: return Response(serializer.errors, status.HTTP_400_BAD_REQUEST) phone_number = serializer.initial_data['phone_number'].replace(' ', '') try: user = User.objects.get(phone_number=phone_number) except User.DoesNotExist: user = User.objects.create_user( phone_number=phone_number, username=phone_number) user.phone_code = randint(99999, 999999) user.save() TokenObtainPairView() return Response(serializer.data, status.HTTP_200_OK) # todo send validation code, I will handle later我的登錄視圖(Chich 驗證驗證碼)@api_view(['POST',])def loginuser(request): if request.method == 'POST': phone_number = request.data.get('phone_number') try: user = User.objects.get(phone_number=phone_number) if int(request.data.get('phone_code')) == user.phone_code and user.phone_code: user.phone_code = None user.save() #!!!!!!!!!!!!!!!!!!!NOW HOW CAN I GET THE JWT AUTHENTICATION TOKEN AND SEND IT TO MY REACT NATIVE APP?! return JsonResponse({'phone_number': phone_number}, status=200)當用戶驗證他的電話號碼時,如何將 jwt 格式的身份驗證令牌與響應一起發送?urls.py:path('api/token/', users_views.ObtainToken.as_view(), name='token_obtain_pair'),我的自定義 acquireToken 視圖:class ObtainToken(TokenObtainPairView): permission_classes = (AllowAny,) serializer_class = MyTokenObtainPairSerializer我還發現,當我使用 Postman 時,如果我發送空密碼,系統將給出身份驗證令牌。我將不勝感激任何幫助,謝謝
1 回答

PIPIONE
TA貢獻1829條經驗 獲得超9個贊
您的代碼應該基于現有的視圖和序列化器rest_framework_simplejwt:使用TokenObtainPairView是一個好的開始,請保留它。
然后在你的seriliizer_class中MyTokenObtainPairSerializer,你應該使用TokenObtainSerializer
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
def validate(self, attrs):
self.user = User.objects.get(phone_number=phone_number)
# Do the verification with the phone_code here, if error, return a response with an error status code
refresh = self.get_token(self.user)
data['refresh'] = text_type(refresh)
data['access'] = text_type(refresh.access_token)
return data
添加回答
舉報
0/150
提交
取消