update otp
This commit is contained in:
@@ -1,9 +1,12 @@
|
|||||||
from .models import *
|
from .models import *
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
|
||||||
|
|
||||||
|
class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
|
||||||
|
otp = serializers.CharField(required=False)
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
del self.fields['password']
|
||||||
class ProfileSerializer(serializers.ModelSerializer):
|
class ProfileSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ from . import views
|
|||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('profile', views.ProfileView.as_view()),
|
path('profile', views.ProfileView.as_view()),
|
||||||
|
path('send_otp', views.SendOTPView.as_view(), name='send-otp-view'),
|
||||||
path('address/create', views.CreateAddressView.as_view(), name='create-address'),
|
path('address/create', views.CreateAddressView.as_view(), name='create-address'),
|
||||||
path('address/edit/<int:pk>', views.EditAddressView.as_view(), name='edit-address'),
|
path('address/edit/<int:pk>', views.EditAddressView.as_view(), name='edit-address'),
|
||||||
path('address/delete/<int:pk>', views.DeleteAddressView.as_view(), name='delete-address'),
|
path('address/delete/<int:pk>', views.DeleteAddressView.as_view(), name='delete-address'),
|
||||||
path('address/list', views.GetUserAddressesView.as_view(), name='list-addresses'),
|
path('address/list', views.GetUserAddressesView.as_view(), name='list-addresses'),
|
||||||
path('address/<int:pk>', views.GetIDUserAddressView.as_view(), name='get-ID-address'),
|
path('address/<int:pk>', views.GetIDUserAddressView.as_view(), name='get-ID-address'),
|
||||||
|
|
||||||
]
|
]
|
||||||
@@ -2,9 +2,69 @@ from django.shortcuts import render
|
|||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework import generics, permissions, status
|
from rest_framework import generics, permissions, status
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from .serializers import ProfileSerializer, UserAddressSerializer
|
from .serializers import ProfileSerializer, UserAddressSerializer, CustomTokenObtainPairSerializer
|
||||||
from .models import UserAddressModel
|
from .models import UserAddressModel, User
|
||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated, AllowAny
|
||||||
|
from drf_spectacular.utils import extend_schema, OpenApiParameter
|
||||||
|
from rest_framework_simplejwt.views import TokenObtainPairView
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
|
from rest_framework_simplejwt.tokens import RefreshToken
|
||||||
|
class SendOTPView(APIView):
|
||||||
|
permission_classes = [AllowAny]
|
||||||
|
@extend_schema(
|
||||||
|
request={
|
||||||
|
"application/json": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"phone": {"type": "string", "example": "09123456789"},
|
||||||
|
},
|
||||||
|
"required": ["phone"],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
def post(self, request):
|
||||||
|
phone = request.data.get('phone')
|
||||||
|
try:
|
||||||
|
user, created = User.objects.get_or_create(phone=phone)
|
||||||
|
print(created)
|
||||||
|
print(user.phone)
|
||||||
|
user.set_otp()
|
||||||
|
message = f"کد یک بار مصرف : {user.otp}"
|
||||||
|
print(message)
|
||||||
|
# send otp
|
||||||
|
return Response({'detail': 'OTP sent successfully'}, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
except User.DoesNotExist:
|
||||||
|
return Response({'detail': 'User not found'}, status=status.HTTP_404_NOT_FOUND)
|
||||||
|
|
||||||
|
|
||||||
|
class CustomTokenObtainPairView(TokenObtainPairView):
|
||||||
|
serializer_class = CustomTokenObtainPairSerializer
|
||||||
|
# @extend_schema(
|
||||||
|
# tags=["Authentication"]
|
||||||
|
# )
|
||||||
|
def post(self, request, *args, **kwargs):
|
||||||
|
phone = request.data.get("phone")
|
||||||
|
otp = request.data.get("otp")
|
||||||
|
user = get_object_or_404(User, phone=phone)
|
||||||
|
if user:
|
||||||
|
if not otp:
|
||||||
|
return Response({'detail': 'کد یک بار مصرف ضروری میباشد'}, status=status.HTTP_401_UNAUTHORIZED)
|
||||||
|
if not user.verify_otp(otp):
|
||||||
|
return Response({'detail': 'کد یک بار مصرف منقضی شده یا اشتباه است'}, status=status.HTTP_401_UNAUTHORIZED)
|
||||||
|
|
||||||
|
user.clear_otp()
|
||||||
|
refresh = RefreshToken.for_user(user)
|
||||||
|
return Response({
|
||||||
|
'refresh': str(refresh),
|
||||||
|
'access': str(refresh.access_token),
|
||||||
|
})
|
||||||
|
|
||||||
|
return Response({'detail': 'Invalid credentials'}, status=status.HTTP_401_UNAUTHORIZED)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ProfileView(APIView):
|
class ProfileView(APIView):
|
||||||
serializer_class = ProfileSerializer
|
serializer_class = ProfileSerializer
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
|
|||||||
@@ -92,7 +92,6 @@ INSTALLED_APPS = [
|
|||||||
'rest_framework_simplejwt',
|
'rest_framework_simplejwt',
|
||||||
'rest_framework_simplejwt.token_blacklist',
|
'rest_framework_simplejwt.token_blacklist',
|
||||||
'rest_framework.authtoken',
|
'rest_framework.authtoken',
|
||||||
'djoser',
|
|
||||||
# custom apps
|
# custom apps
|
||||||
'product',
|
'product',
|
||||||
'account',
|
'account',
|
||||||
|
|||||||
@@ -5,15 +5,17 @@ from drf_spectacular.views import SpectacularSwaggerView, SpectacularAPIView
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from rest_framework_simplejwt.views import TokenObtainPairView,TokenRefreshView
|
from rest_framework_simplejwt.views import TokenObtainPairView,TokenRefreshView
|
||||||
from product import views
|
from product import views
|
||||||
|
from account.views import CustomTokenObtainPairView
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|
||||||
# djoser
|
# djoser
|
||||||
path('auth/', include('djoser.urls')),
|
# path('auth/', include('djoser.urls')),
|
||||||
path('auth/', include('djoser.urls.jwt')),
|
# path('auth/', include('djoser.urls.jwt')),
|
||||||
|
|
||||||
|
|
||||||
path('token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
|
path('token/', CustomTokenObtainPairView.as_view(), name='token_obtain_pair'),
|
||||||
path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
|
path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
|
||||||
path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
path('schema/', SpectacularAPIView.as_view(), name='schema'),
|
path('schema/', SpectacularAPIView.as_view(), name='schema'),
|
||||||
|
|||||||
Reference in New Issue
Block a user