Вход в Django с использованием класса на основе пользовательского - PullRequest
0 голосов
/ 10 декабря 2018

вот моя модель пользователя.

class User (models.Model):
    username = models.CharField(max_length=50)
    # token = models.CharField(max_length=50)
    email_id = models.EmailField(max_length=50)
    password = models.CharField(max_length=50)
    is_deleted = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True, blank=True)
    updated_at = models.DateTimeField(auto_now_add=True, blank=True)

и вот мои взгляды на создание пользователя

class UserView(APIView):

    def post(self,request):
        try:
            # RequestOverwrite().overWrite(request, {'token':'string'})
            user_data = UserDetailSerializer(data=request.data)
            if not(user_data.is_valid()):
                return Response(user_data.errors)
            user_data.save()
            return Response("user created successfully",status=status.HTTP_201_CREATED)
        except Exception as err:
            print(err)
            return Response("Error while creating user")

Теперь я хочу создать токен при публикациипользователь и этот токен используется позже для входа в систему.также я хочу проверить пользователя, если он существует в базе данных, а затем заставить пользователя аутентифицироваться.

что мне делать ...? любое предложение

ниже - это мой serializers.py

class UserDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model =  User 
        fields = ('id','username','email_id','password','is_deleted','created_at','updated_at')
        extra_kwargs = {
            'password': {
                'required':True,
                'error_messages':{
                'required':"Please fill this field",
                }
            }
        }

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Создание токена должно быть реализовано в модели Пользователь .Вы можете установить значение по умолчанию для поля токена.

Добавить параметр по умолчанию в поле токена модели пользователя:

token = models.CharField (по умолчанию = tokenGenerator, max_length = 50)

tokenGenerator должен быть некоторой функцией, которая возвращает сгенерированный токен.

Во-вторых UserDetailSerializer должен быть отредактирован для получения токена, если это необходимо, но не required .

class UserDetailSerializer(serializers.ModelSerializer):
    # You can also provide this default function like in model field
    # for this token field
    # default=tokenGenerator

    token = serializers.CharField(max_length=50, required=False)

    class Meta:
        model =  User 
        fields = (..., 'token')
        extra_kwargs = ...

Теперь ваша модель получает сгенерированный токен для вновь созданного пользователя.

Пользователь должен автоматически войти в систему после регистрации, но это не так просто.

Вам необходимо указать, как выхочу общаться с API.Вы хотите токен, поэтому я думаю, что front должен запрашивать api, а токен должен использоваться из куки.

Если вы отправляете запрос из браузера, например.jQuery вам нужно получить ответ с сгенерированным токеном и сохранить его в куки.Ваш пост-ответ в DRF:

return Response ({'token': user_data.get ('token')}, status = status.HTTP_201_CREATED)

А теперьу вас есть еще несколько шагов:

  • Прикрепить токен к каждому запросу браузера, который запрашивает API
  • Создать класс аутентификации для проверки каждого запроса проверок на наличие правильного токена
  • ...

Теперь, если вы прочитаете это, вы поймете, что это требует некоторой работы.Если вы это знаете и намеренно хотите создать, вам нужно создать упомянутый класс аутентификации .

В противном случае попробуйте использовать библиотеки типа oauth для django .Это обеспечит вам готовые классы для управления токенами.

Также, как упоминалось @ Ken4scholars, попробуйте использовать модель пользователя Django.У этого есть хорошие методы для проверки и т. Д., Не делая это сделано вручную.

0 голосов
/ 10 декабря 2018

Прежде всего, кажется, что вы определяете пользовательского пользователя, который никоим образом не подключен к Django auth user .Это очень плохая идея, и будет трудно заставить ее работать с большинством функций Django.Вы можете проверить, как настроить существующего пользователя , если вам действительно нужно.

Что касается аутентификации пользователя, то при использовании аутентификации с помощью маркера DRF процесс выглядит следующим образом:

  1. Клиент отправляет запрос на создание пользователя
  2. Если пользователь успешно создан, он запрашивает токен аутентификации, используя логин и пароль пользователя
  3. Бэкэнд проверяет учетные данные пользователя и выдает токен
  4. Клиент делает последующие запросы с токеном
  5. Если срок действия токена истекает или пользователь выходит из системы, повторите 2-4

Проверьте, как это сделать в DRF Документация по TokenAuthentication .

Ваш вопрос не очень конкретен, поэтому я не уверен, какой ответ вы ожидаете, но выполнение этих шагов должно помочь вам.

...