Skip to content

Commit c8d5370

Browse files
committed
backend token auth implemented
1 parent a1d4f35 commit c8d5370

File tree

9 files changed

+78
-9
lines changed

9 files changed

+78
-9
lines changed

backend/core/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
default_app_config = "core.apps.CoreConfig"

backend/core/apps.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,6 @@
33

44
class CoreConfig(AppConfig):
55
name = 'core'
6+
7+
def redy(self):
8+
import core.signals

backend/core/serializer.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from core.models import Order, OrderItem, Product, Review, ShippingAddress
77

88

9+
# Users Serializer
910
class UserSerializer(ModelSerializer):
1011
_id = SerializerMethodField(read_only=True)
1112
isAdmin = SerializerMethodField(read_only=True)
@@ -33,12 +34,6 @@ def get_token(self, obj):
3334
return str(token.access_token)
3435

3536

36-
class ProductSerializer(ModelSerializer):
37-
class Meta:
38-
model = Product
39-
fields = '__all__'
40-
41-
4237
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
4338
def validate(self, attrs):
4439
data = super().validate(attrs)
@@ -48,3 +43,14 @@ def validate(self, attrs):
4843
data[k] = v
4944

5045
return data
46+
47+
# Users Serializer - end
48+
49+
# Product Serializer
50+
51+
52+
class ProductSerializer(ModelSerializer):
53+
class Meta:
54+
model = Product
55+
fields = '__all__'
56+
# Product Serializer - end

backend/core/signals.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from django.contrib.auth.models import User
2+
from django.db.models.signals import pre_save
3+
from django.dispatch import receiver
4+
5+
6+
def updateUser(sender, instance, **kwargs):
7+
if instance.email == '':
8+
instance.email = instance.user
9+
10+
11+
pre_save.connect(updateUser, sender=User)

backend/core/urls.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
from django.urls import path
22

33
from core.views import (MyTokenObtainPairView, getProduct, getProducts,
4-
getUserProfile)
4+
getUserProfile, getUsers, registerUser)
55

66
APP_NAME = 'core'
77

88
urlpatterns = [
9+
# user urls - auth
910
path('users/login/', MyTokenObtainPairView.as_view(), name="token_obtain_pair"),
11+
path('users/register/', registerUser, name="user-register"),
1012
path('users/profile/', getUserProfile, name="user-profile"),
13+
path('users/', getUsers, name="users"),
14+
15+
# products urls
1116
path('products/', getProducts, name="get-products"),
1217
path('product/<int:id>/', getProduct, name="get-product"),
18+
19+
# orders urls
1320
]

backend/core/views.py

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,59 @@
1-
from rest_framework.decorators import api_view
1+
from django.contrib.auth.models import User
2+
from rest_framework.decorators import api_view, permission_classes
3+
from rest_framework.permissions import IsAdminUser, IsAuthenticated
24
from rest_framework.response import Response
5+
from rest_framework.status import HTTP_400_BAD_REQUEST
36
from rest_framework_simplejwt.views import TokenObtainPairView
47

58
from core.models import Order, OrderItem, Product, Review, ShippingAddress
69
from core.serializer import (MyTokenObtainPairSerializer, ProductSerializer,
7-
UserSerializer)
10+
UserSerializer, UserSerializerWithToken)
811

912

13+
# Users views
14+
1015
class MyTokenObtainPairView(TokenObtainPairView):
1116
serializer_class = MyTokenObtainPairSerializer
1217

1318

1419
@api_view(['GET'])
20+
@permission_classes([IsAuthenticated])
1521
def getUserProfile(request):
1622
user = request.user
1723
serializer = UserSerializer(user, many=False)
1824
return Response(serializer.data)
1925

2026

27+
@api_view(['GET'])
28+
@permission_classes([IsAdminUser])
29+
def getUsers(request):
30+
users = User.objects.all()
31+
serializer = UserSerializer(users, many=True)
32+
return Response(serializer.data)
33+
34+
35+
@api_view(['POST'])
36+
def registerUser(request):
37+
data = request.data
38+
try:
39+
user = User.objects.create(
40+
first_name=data.get('name'),
41+
username=data.get('email'),
42+
email=data.get('email'),
43+
)
44+
user.set_password(data.get('password'))
45+
user.save()
46+
serializer = UserSerializerWithToken(user)
47+
return Response(serializer.data)
48+
except Exception as e:
49+
message = {'detail': 'User with this email alrady exists.'}
50+
return Response(message, status=HTTP_400_BAD_REQUEST)
51+
52+
# Users views - end
53+
54+
# Products views
55+
56+
2157
@api_view(['GET'])
2258
def getProducts(request):
2359
products = Product.objects.all()
@@ -30,3 +66,8 @@ def getProduct(request, id):
3066
product = Product.objects.get(pk=id)
3167
serializer = ProductSerializer(product)
3268
return Response(serializer.data)
69+
70+
# Products views - end
71+
72+
# Order views
73+
# Order views - end

backend/static/images/alexa.jpg

36.2 KB
Loading

backend/static/images/mouse.jpg

59.3 KB
Loading

backend/static/images/playstation.jpg

47.9 KB
Loading

0 commit comments

Comments
 (0)