From d54e2fadf2aa19cbd2dff796bd7b5b2ecb354573 Mon Sep 17 00:00:00 2001 From: Ian Andwati Date: Wed, 6 Mar 2024 00:51:06 +0300 Subject: [PATCH] completed register and login views --- authentication/urls.py | 0 authentication/views.py | 41 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 authentication/urls.py diff --git a/authentication/urls.py b/authentication/urls.py new file mode 100644 index 0000000..e69de29 diff --git a/authentication/views.py b/authentication/views.py index 91ea44a..0e49a5b 100644 --- a/authentication/views.py +++ b/authentication/views.py @@ -1,3 +1,40 @@ -from django.shortcuts import render +import jwt +from django.conf import settings +from django.contrib import auth +from rest_framework import status +from rest_framework.generics import GenericAPIView +from rest_framework.response import Response -# Create your views here. +from .serializers import LoginSerializer, UserSerializer + + +class RegisterView(GenericAPIView): + serializer_class = UserSerializer + + def post(self, request): + serializer = UserSerializer(data=request.data) + + if serializer.is_valid(): + serializer.save() + return Response(serializer.data, status=status.HTTP_201_CREATED) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + + +class LoginView(GenericAPIView): + serializer_class = LoginSerializer + + def post(self, request): + data = request.data + username = data.get("username", "") + password = data.get("password", "") + + user = auth.authenticate(username=username, password=password) + + if user: + auth_token = jwt.decode({"username": user.username}, settings.JWT_SECRET_KEY) + serializer = UserSerializer(user) + data = {"user": serializer.data, "token": auth_token} + + return Response(data, status=status.HTTP_200_OK) + + return Response({"detail": "Inavalid credentials"}, status=status.HTTP_401_UNAUTHORIZED)