Аутентифікація за допомогою JWT для входу та реєстрації користувачів у Django

В сучасних веб-додатках забезпечення безпечної аутентифікації користувачів є першочерговим завданням. JSON Web Tokens (JWT) є широко використовуваним рішенням для обробки аутентифікації користувачів. У цьому пості ми розглянемо, як працює JWT для входу та реєстрації користувачів у проекті Django та як реалізувати це безперешкодно. Ви дізнаєтесь про реєстрацію користувачів, вхід і керування токенами за допомогою JWT.

Реєстрація користувачів

Реєстрація користувачів — це процес, під час якого нові користувачі надають свої дані (наприклад, ім’я користувача, електронну пошту та пароль), а сервер створює нового користувача в базі даних. Після реєстрації користувач зможе увійти в систему та отримати токен аутентифікації (JWT).

Під час реєстрації користувач надсилає свої дані, які потім зберігаються безпечно в базі даних. Після успішного створення користувача сервер надсилає відповідь, що підтверджує реєстрацію.

Вхід користувача

Після реєстрації користувачі можуть увійти, використовуючи свої облікові дані (ім’я користувача та пароль). Сервер перевіряє ці дані, і, якщо вони вірні, генерує JWT токен, який повертається клієнту. Цей токен буде використовуватись для аутентифікації користувача під час майбутніх запитів.

Коли користувач входить в систему, сервер перевіряє його облікові дані (ім’я користувача та пароль). Якщо вони вірні, сервер генерує JWT токен, який повертається клієнту. Цей токен повинен бути включений у заголовки наступних запитів для доступу до захищених переглядів, таких як додавання учасників до команди або створення нових ресурсів.

JWT Токен

JWT токен — це безпечний рядок, який кодує ідентичність користувача та будь-які відповідні претензії або інформацію. Клієнт надсилає цей токен з кожним запитом до захищених кінцевих точок, що гарантує, що користувач аутентифікований і авторизований для доступу до цих ресурсів.

JWT токен, після того як він буде виданий клієнту, повинен бути включений у заголовок Authorization для кожного наступного запиту. Цей заголовок містить токен, який перевіряється сервером. Якщо токен є дійсним, запит авторизується; якщо ні, сервер повертає відповідь 401 Unauthorized.

Оновлення токена

JWT токени мають час дії. Якщо токен користувача закінчився, він може запитати новий токен, надіславши свій токен оновлення до кінцевої точки оновлення. Токен оновлення використовується для створення нового JWT без необхідності повторного входу користувача.

Як це реалізовано в Django

Розглянемо реалізацію аутентифікації JWT в Django. Ми створимо перегляди для реєстрації користувачів, входу та оновлення токенів, а також будемо керувати аутентифікацією JWT за допомогою Django та пакету djangorestframework-simplejwt.

1. Встановлення необхідних пакетів

Перш за все, встановіть необхідні пакети в вашому проекті Django:

pip install django djangorestframework djangorestframework-simplejwt

2. Оновлення налаштувань Django

У файлі settings.py додайте rest_framework та rest_framework_simplejwt до INSTALLED_APPS:

INSTALLED_APPS = [  
 'django.contrib.admin',  
 'django.contrib.auth',  
 'django.contrib.contenttypes',  
 'django.contrib.sessions',  
 'django.contrib.messages',  
 'django.contrib.staticfiles',  
 'rest_framework',  
 'rest_framework_simplejwt',  
]

Далі налаштуйте JWT як метод аутентифікації за замовчуванням:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}

3. Створення серіалізаторів

У файлі users/serializers.py створіть серіалізатори для реєстрації користувачів, входу та керування токенами.

from rest_framework import serializers  
from django.contrib.auth.models import User  
from rest_framework_simplejwt.tokens import RefreshToken  

class UserSerializer(serializers.ModelSerializer):  
    class Meta:  
        model = User  
        fields = ['username', 'email', 'password']  
        extra_kwargs = {'password': {'write_only': True}}  

    def create(self, validated_data):  
        user = User.objects.create_user(**validated_data)  
        return user  

class LoginSerializer(serializers.Serializer):  
    username = serializers.CharField()  
    password = serializers.CharField()  

class TokenSerializer(serializers.Serializer):  
    refresh = serializers.CharField()  
    access = serializers.CharField()  

4. Створення переглядів

Створіть перегляди для реєстрації користувачів, входу та оновлення токенів у файлі users/views.py.

from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView  
from .serializers import UserSerializer, LoginSerializer, TokenSerializer  
from rest_framework import status  
from rest_framework.response import Response  
from django.contrib.auth import authenticate  

class RegisterView(APIView):  
    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(TokenObtainPairView):  
    serializer_class = LoginSerializer  

class RefreshTokenView(TokenRefreshView):  
    serializer_class = TokenSerializer  

5. Визначення URL

У файлі users/urls.py визначте маршрути для реєстрації, входу та оновлення токенів.

from django.urls import path  
from .views import RegisterView, LoginView, RefreshTokenView  

urlpatterns = [  
    path('register/', RegisterView.as_view(), name='register'),  
    path('login/', LoginView.as_view(), name='login'),  
    path('refresh/', RefreshTokenView.as_view(), name='refresh'),  
]

У головному файлі urls.py додайте URL-адреси користувача:

from django.urls import include, path  

urlpatterns = [  
    path('api/', include('users.urls')),  
]

Висновок

Аутентифікація JWT забезпечує безпечний та безстатевий спосіб керування сесіями користувачів.
Слідуючи цьому посібнику, ви зможете реалізувати повнофункціональну систему реєстрації користувачів та входу за допомогою JWT у вашому Django-додатку. Ця конфігурація дозволяє легко здійснювати аутентифікацію користувачів, а також дає можливість оновлювати токени, що робить її масштабованою та безпечною для використання в реальних додатках.

Перекладено з: JWT Authentication for User Login and Registration in Django

Leave a Reply

Your email address will not be published. Required fields are marked *