Пользовательский Django Rest JWT Войти - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь написать собственный вид входа в систему jwt для аутентификации django rest api.Но это не работает, и я не знаю почему. Не могли бы вы помочь мне исправить этот код или привести какой-то пример.Заранее спасибо.

мой сериализатор:

class LoginSerializer(serializers.Serializer):
    token = serializers.CharField(max_length=256)
    username = serializers.CharField(max_length=128)
    password = serializers.CharField(write_only=True,
                                     required=True,
                                     style={
                                         'input_type': 'password',
                                         'placeholder': 'password'
                                     })

мой взгляд:

from .serializers import LoginSerializer

class UserLogin(APIView):
    """
        POST login/
    """
    permission_classes = (permissions.AllowAny,)
    queryset = User.objects.all()

    def post(self, request, *args, **kwargs):
        username = request.data.get('username', '')
        password = request.data.get('password', '')
        user = auth.authenticate(request, username=username, password=password)
        if user is not None:
            auth.login(request, user)
            serializer = LoginSerializer(self.queryset,
                data={
                    'token': jwt_encode_handler(jwt_payload_handler(user)),
                    'username': username,
                    'password': password,
                }
            )
            if serializer.is_valid():
                return Response(serializer.data)
        return Response(status=status.HTTP_401_UNAUTHORIZED)

1 Ответ

2 голосов
/ 22 марта 2019

Вы можете просто выбросить свой токен в json и даже не использовать сериализатор.Здесь вы предоставляете данные и формат, поэтому вам не нужно проверять ввод данных пользователем.

class UserLogin(APIView):
    """
        POST login/
    """
    permission_classes = (permissions.AllowAny,)
    queryset = User.objects.all()

    def post(self, request, *args, **kwargs):
        username = request.data.get('username', '')
        password = request.data.get('password', '')
        user = auth.authenticate(request, username=username, password=password)
        if user is not None:
            auth.login(request, user)
            return Response({'token': jwt_encode_handler(jwt_payload_handler(user)),
                    'username': user.username})

        return Response(status=status.HTTP_401_UNAUTHORIZED)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...