Commit c46742c8 authored by Ilham Maulana's avatar Ilham Maulana 💻

feat: user detail by token api

parent f7c1d565
from django.contrib.auth import authenticate
from rest_framework import serializers from rest_framework import serializers
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from users.models import User, Librarian, Member, LibrarianLoginHistory from users.models import User, Librarian, Member, LibrarianLoginHistory
...@@ -149,3 +149,11 @@ class MemberSerializer(serializers.ModelSerializer): ...@@ -149,3 +149,11 @@ class MemberSerializer(serializers.ModelSerializer):
Member.objects.filter(id=instance.id).update(user=user[0]) Member.objects.filter(id=instance.id).update(user=user[0])
instance.save() instance.save()
return instance return instance
class TokenSerializer(TokenObtainPairSerializer):
@classmethod
def get_token(cls, user):
token = super().get_token(user)
token["user_id"] = user.id
return token
import json
from django.contrib.auth import authenticate from django.contrib.auth import authenticate
from django.contrib.auth.tokens import default_token_generator from django.contrib.auth.tokens import default_token_generator
...@@ -7,6 +8,7 @@ from rest_framework import views, viewsets, status ...@@ -7,6 +8,7 @@ from rest_framework import views, viewsets, status
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.filters import SearchFilter from rest_framework.filters import SearchFilter
from rest_framework_simplejwt.views import TokenObtainPairView from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework_simplejwt.tokens import AccessToken
from .serializers import ( from .serializers import (
User, User,
...@@ -16,6 +18,7 @@ from .serializers import ( ...@@ -16,6 +18,7 @@ from .serializers import (
LoginHistorySerializer, LoginHistorySerializer,
Member, Member,
MemberSerializer, MemberSerializer,
TokenSerializer,
) )
from .permissions import IsStaffUser, IsNotStaffUser from .permissions import IsStaffUser, IsNotStaffUser
...@@ -71,7 +74,28 @@ class MemberViewSet(viewsets.ModelViewSet): ...@@ -71,7 +74,28 @@ class MemberViewSet(viewsets.ModelViewSet):
return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.data, status=status.HTTP_200_OK)
class UserDetailView(views.APIView):
def get(self, request, *args, **kwargs):
header = request.headers.get("Authorization")
token = header.replace("Bearer ", "")
verified_token = AccessToken(token=token)
user_id = verified_token.payload.get("user_id")
user = User.objects.get(pk=user_id)
data = {
"id": user.pk,
"username": user.username,
"email": user.email,
"first_name": user.first_name,
"last_name": user.last_name,
"is_staff": user.is_staff,
}
return Response(data, status=status.HTTP_200_OK)
class LoginBaseView(TokenObtainPairView): class LoginBaseView(TokenObtainPairView):
serializer_class = TokenSerializer
user = None user = None
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
......
...@@ -13,6 +13,7 @@ from .auth.views import ( ...@@ -13,6 +13,7 @@ from .auth.views import (
LogoutView, LogoutView,
TokenResetPasswordView, TokenResetPasswordView,
ResetPasswordConfirmView, ResetPasswordConfirmView,
UserDetailView,
) )
from .book.views import BookViewSet, CategoryViewSet from .book.views import BookViewSet, CategoryViewSet
from .loans.views import ( from .loans.views import (
...@@ -45,6 +46,11 @@ router_member_loan.register(r"loans", MemberLoanViewSet, basename="member_loans" ...@@ -45,6 +46,11 @@ router_member_loan.register(r"loans", MemberLoanViewSet, basename="member_loans"
urlpatterns = [ urlpatterns = [
path("", include(router.urls)), path("", include(router.urls)),
# auth # auth
path(
"user",
UserDetailView.as_view(),
name="user_detail",
),
path( path(
"reset-password/request-token", "reset-password/request-token",
TokenResetPasswordView.as_view(), TokenResetPasswordView.as_view(),
......
...@@ -54,7 +54,7 @@ urlpatterns = [ ...@@ -54,7 +54,7 @@ urlpatterns = [
name="password_reset_complete", name="password_reset_complete",
), ),
# api # api
path("api/token/refresh/", TokenRefreshView.as_view(), name="token_refresh"), path("api/v1/token/refresh/", TokenRefreshView.as_view(), name="token_refresh"),
path("api/v1/", include("api.urls"), name="API_V1"), path("api/v1/", include("api.urls"), name="API_V1"),
# 3rd party # 3rd party
path("api-auth/", include("rest_framework.urls"), name="api_auth"), path("api-auth/", include("rest_framework.urls"), name="api_auth"),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment