Задать вопрос
@DannYLook
Программист

Как связать custom user с token в django?

есть код который позволяет регистрировать пользователя, логиниться получая token и потом смотреть информацию по токену и выходить с аккаунта. Как мне сделать custom user со своими полями например name, lastname, age? 
Инструкция и код - https://github.com/FlDanyT/my_Django_documentation...
Код:
models.py
import secrets
from django.db import models
from django.contrib.auth.models import User # Встроенная модель пользователя Django

class UserToken(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='token')
    token = models.CharField(max_length=64, unique=True, blank=True)

    def generate_token(self):
        self.token = secrets.token_hex(32)  # Генерируем безопасный токен
        self.save()
        return self.token

    def __str__(self):
        return f'Token for {self.user.username}' # Ответ серверу

serializers.py
from django.contrib.auth.models import User
from rest_framework import serializers
from .models import UserToken

class UserRegisterSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True, min_length=8)

    class Meta:
        model = User
        fields = ['username', 'email', 'password']

    def create(self, validated_data):
        user = User.objects.create_user(**validated_data)
        UserToken.objects.create(user=user)  # Создаем токен для пользователя
        return user

class UserLoginSerializer(serializers.Serializer):
    username = serializers.CharField()
    password = serializers.CharField(write_only=True)

    def validate(self, data):
        from django.contrib.auth import authenticate

        user = authenticate(username=data['username'], password=data['password'])
        if not user:
            raise serializers.ValidationError("Неверные учетные данные")

        token, _ = UserToken.objects.get_or_create(user=user)
        token.generate_token()

        return {'token': token.token}
  • Вопрос задан
  • 28 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы