У меня возникают трудности с внедрением двухфакторной аутентификации с помощью totp, я хочу, чтобы после обычного входа в систему пользователю была предложена страница входа с токеном

Ниже приведена функция, с помощью которой я пытался реализовать логику двухфакторной аутентификации

def login_view(request):
    if request.user.is_authenticated:
        return redirect('/dashboard')
    if request.method == 'POST':
        email = request.POST['email']
        password = request.POST['password']
        cache.set('email',email)
        fact = User.objects.filter(email=email).values('username')
        username = fact[0]['username']
        username = username.encode(encoding='utf-8')
        password = password.encode(encoding='utf-8)
        username = username.strip(b"b'")
        print(username)
        print(str(password))
        user = authenticate(request, username=username, password=password)
        cache.set('user',user)
        if user is None:
            context = {'error':'incorrect username or password'}
            return render(request, 'index.html' , context)
        print(username)
        is_enrolled = enrolled(request)
        if not is_enrolled.json():
           login(request, user)
           return redirect('/dashboard')
        return render(request, 'tokenlogin.html')

   return render(request, 'index.html')

Функция ниже проверяет, зарегистрировался ли пользователь на двухфакторную аутентификацию:

        def isenrolled(request):

            email = request.user.email

            res = requests.post(
           'http://0.0.0.0:8000/api/users/email/', 
            data={
            'account_name': email,
             },

           headers={
            'Authorization': 'Bearer {0}'.format(ACCESS_TOKEN),
            'Content-Type': 'application/x-www-form-urlencoded'
           }
          )

        return res

Эта функция для проверки включенного MFA перед входом в систему:

    def enrolled(request):

       email = request.POST['email']

       res = requests.post(
       'http://0.0.0.0:8000/api/users/email/', 
        data={
            'account_name': email,
        },

        headers={
            'Authorization': 'Bearer {0}'.format(ACCESS_TOKEN),    

            'Content-Type': 'application/x-www-form-urlencoded'
        }
      ) 

ошибка возникает из-за того, что имя пользователя и пароль имеют тип байт, а не строка, так что если есть способ преобразовать их в строку

Quit the server with CONTROL-C.
b'jdv'           #username
b'twofactor12'   #password
[30/Nov/2021 08:51:50] "POST / HTTP/1.1" 200 5128
b'jdv'          #username
b'twofactor12'  #password
[30/Nov/2021 08:51:55] "POST / HTTP/1.1" 200 5128
Вернуться на верх