Триггер django -простойJWT аутентификации вручную - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь переназначить django -rest-framework-simplejwt для совершенно другой аутентификации (номер телефона и код подтверждения SMS в двух разных запросах). Дело в том, что у меня все разработано, но из-за тесной интеграции этой системы аутентификации в проекте мне пришлось бы вручную запускать TokenObtainPairView, чтобы пользователь все еще получал токен и проходил аутентификацию в системе.

Есть есть ли способ сделать это? Я думал о том, чтобы запустить представление вручную, но это не сработает, поскольку даже если я настрою сериализатор для этого представления, я не могу переопределить стандартное имя пользователя / пароль для пользователя (у пользователя нет пароля, а имя пользователя Случайно)

Есть идеи, как это сделать?

Мой текущий код такой:

class LoginResource(APIView):
    permission_classes = (permissions.AllowAny,)

    def post(self, request):
        payload = json.loads(request.body)
        try:
            profile = UserProfile.objects.get(phone=payload.get('phone', ''))
            code = codegenerator()
            profile.authentication_code = code
            profile.save()
            # TODO: Send the generated code over SMS
            send_mail(
                    'Your authentication code',
                    'Your authentication code is: {}'.format(code),
                    settings.EMAIL_SEND_FROM,
                    (profile.email,),
                    fail_silently=False,
                )
            payload = {
                "status": "success"
            }
            return JsonResponse(payload, status=200, safe=False)
        except Exception as e:
            payload = {
                "status": "error",
                "message": "Unable to obtain the user: {}".format(e)
            }
            return JsonResponse(payload, status=500, safe=False)


class ValidateCodeAndLogin(APIView):
    permission_classes = (permissions.AllowAny,)

    def post(self, request):
        payload = json.loads(request.body)
        try:
            profile = UserProfile.objects.get(phone=payload.get('phone', ''))
            code = payload.get('validation_code', 'INVALID')
            if code == profile.authentication_code:
                profile.validated = True
                profile.authentication_code = ''
                profile.save()
                #
                # TODO: Return the JWT token
                #
            else:
                payload = {
                    "status": "error",
                    "message": "Invalid authentication code"
                }
                return JsonResponse(payload, status=401, safe=False)

        except Exception as e:
            payload = {
                "status": "error",
                "message": "Unable to obtain the user: {}".format(e)
            }
            return JsonResponse(payload, status=500, safe=False)

1 Ответ

0 голосов
/ 13 февраля 2020

Очевидно, я не полностью прочитал документацию, и я ошибся. здесь указано, как вручную запускать генерацию токена, поэтому мне просто нужно было это сделать.

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