mise en place du système autapp

This commit is contained in:
2024-07-14 15:10:33 +02:00
parent c29e106436
commit e02ae71c48
11 changed files with 80 additions and 0 deletions

0
authapp/__init__.py Normal file
View File

3
authapp/admin.py Normal file
View File

@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

6
authapp/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class AuthappConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'authapp'

0
authapp/models.py Normal file
View File

14
authapp/serializers.py Normal file
View File

@@ -0,0 +1,14 @@
from rest_framework import serializers
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'password')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
Token.objects.create(user=user)
return user

3
authapp/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

8
authapp/urls.py Normal file
View File

@@ -0,0 +1,8 @@
from django.urls import path
from .views import CustomAuthToken, RegenerateTokenView, VerifyTokenView
urlpatterns = [
path('login/', CustomAuthToken.as_view(), name='login'),
path('regenerate-token/', RegenerateTokenView.as_view(), name='regenerate-token'),
path('verify-token/', VerifyTokenView.as_view(), name='verify-token'),
]

36
authapp/views.py Normal file
View File

@@ -0,0 +1,36 @@
from rest_framework.views import APIView
from rest_framework import generics
from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from .serializers import UserSerializer
from rest_framework.permissions import IsAuthenticated
from rest_framework import status
class CustomAuthToken(ObtainAuthToken):
def post(self, request, *args, **kwargs):
response = super().post(request, *args, **kwargs)
token = Token.objects.get(key=response.data['token'])
return Response({'token': token.key, 'user_id': token.user_id})
class RegenerateTokenView(APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
user = request.user
# Supprimer l'ancien token
Token.objects.filter(user=user).delete()
# Générer un nouveau token
token = Token.objects.create(user=user)
return Response({'token': token.key}, status=status.HTTP_201_CREATED)
class VerifyTokenView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request):
user = request.user
return Response({
'user_id': user.id,
'username': user.username,
'email': user.email
}, status=status.HTTP_200_OK)