· 2 years ago · Dec 07, 2022, 08:30 PM
1from os import access
2from rest_framework.response import Response
3from users import serializers
4from users.models import userCastem
5from rest_framework.views import APIView
6from django.contrib.auth.hashers import make_password
7from rest_framework.permissions import IsAuthenticated,AllowAny,IsAuthenticatedOrReadOnly
8from users.serializers import UserSerializer
9from rest_framework_simplejwt.tokens import RefreshToken
10from rest_framework import status
11from django.conf import settings
12from pilkashop24.settings import SECRET_KEY
13from django.middleware import csrf
14from django.contrib.auth import authenticate
15from rest_framework_simplejwt.views import TokenViewBase
16from rest_framework_simplejwt.exceptions import InvalidToken,TokenError
17
18import jwt
19
20
21class addUser(APIView):
22 def post(self, request):
23 TelInput= request.data.get('TelInput')
24 username =request.data.get('username')
25 eMail =request.data.get('eMail')
26 passwordReg =request.data.get('passwordReg')
27 userCastem.objects.create(telephon=TelInput,username=username,email=eMail,password=make_password(passwordReg))
28 return Response('yes')
29
30
31class UserProf(APIView):
32 permission_classes = [AllowAny]
33 def post(self, request):
34 data = request.data
35 print(data)
36 id = data.get('idUser')
37 user = userCastem.objects.get(id=id)
38 serializer= UserSerializer(user,many=True)
39 return Response(serializer.data)
40
41
42def get_tokens_for_user(user):
43 refresh = RefreshToken.for_user(user)
44 return {
45 'access': str(refresh.access_token),
46 'refresh': str(refresh),
47 }
48
49class LoginView(APIView):
50 permission_classes = [AllowAny]
51 def post(self, request,format=None):
52 data = request.data
53 response = Response()
54 telephon = data.get('telephon', None)
55 password = data.get('password', None)
56 user = authenticate(telephon=telephon, password=password)
57 if user is not None:
58 if user.is_active:
59 tokens = get_tokens_for_user(user)
60 print(tokens["refresh"])
61 response.set_cookie(
62 value = tokens["refresh"],
63 key = settings.SIMPLE_JWT['AUTH_COOKIE'],
64 expires = settings.SIMPLE_JWT['ACCESS_TOKEN_LIFETIME'],
65 secure = settings.SIMPLE_JWT['AUTH_COOKIE_SECURE'],
66 httponly = settings.SIMPLE_JWT['AUTH_COOKIE_HTTP_ONLY'],
67 samesite = settings.SIMPLE_JWT['AUTH_COOKIE_SAMESITE'],
68 )
69 print(request.COOKIES)
70 decodeJTW = jwt.decode(str(tokens["access"]),SECRET_KEY,algorithms=["HS256"])
71 # add payload here!!
72 # decodeJTW['user'] ='Артур'
73 encoded = jwt.encode(decodeJTW, SECRET_KEY,algorithm="HS256")
74 csrf.get_token(request)
75
76 response.data = {
77 'access': str(encoded),
78 }
79
80 return response(response.data)
81 else:
82 return Response({"Invalid" : "Не правильный пароль"}, status=status.HTTP_404_NOT_FOUND)