У меня возникают трудности с внедрением двухфакторной аутентификации с помощью 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