Как настроить Django Authy для двухфакторной аутентификации

#django #django-rest-framework #twilio #twilio-api #twilio-functions

#django #django-rest-framework #twilio #twilio-api #twilio-функции

Вопрос:

Последние пару дней я изучал Django 2 factor. Я, наконец, дошел до того, что у меня заработала проверка телефона Django Twilio. Вот код, рабочий код…

 from authy.api import AuthyApiClient
from django.conf import settings
from django.shortcuts import render, redirect

from .forms import VerifyForm, TokenForm


authy_api = AuthyApiClient(settings.ACCOUNT_SECURITY_API_KEY)

def SetupView(request):
    if request.method == 'POST':
        form = VerifyForm(request.POST)
        if form.is_valid():
            request.session['phone_number'] = form.cleaned_data['phone_number']
            request.session['country_code'] = form.cleaned_data['country_code']
            authy_api.phones.verification_start(
                form.cleaned_data['phone_number'],
                form.cleaned_data['country_code'],
                via=form.cleaned_data['via']
            )
            return redirect('token_validation')
    else:
        form = VerifyForm()
    return render(request, 'registration/verify.html', {'form': form})


def token_validation(request):
    if request.method == 'POST':
        form = TokenForm(request.POST)
        if form.is_valid():
            verification = authy_api.phones.verification_check(
                request.session['phone_number'],
                request.session['country_code'],
                form.cleaned_data['token']
            )
            if verification.ok():
                request.session['is_verified'] = True
                return redirect('verified')
            else:
                for error_msg in verification.errors().values():
                    form.add_error(None, error_msg)
    else:
        form = TokenForm()
    return render(request, 'registration/token_validation.html', {'form': form})

def verified(request):
    if not request.session.get('is_verified'):
        return redirect('phone_verification')
    return render(request, 'registration/verified.html')
  

Используя приведенный выше код вместе с указанием ключа ACCOUNT_SECURITY_API_KEY в моем settings.py файл — это все, что требовалось для получения приведенного выше кода для передачи 4-значного кода на мой телефон. Прогресс…

Однако, чего я действительно пытаюсь достичь, так это использовать приложение AUTHY для предоставления кода входа….Я просмотрел следующую страницу …https://www.twilio.com/docs/authy/quickstart/two-factor-authentication-python-django#linkcode И код не загружается на этой странице…есть ли у кого-нибудь опыт или он знает, где искать, чтобы я мог заставить Django работать с Authy и получать код, который меняется каждые 20 секунд, в отличие от примера с 4-значным PIN-кодом, показанного выше? Заранее спасибо за любые мысли.

Ответ №1:

Евангелист-разработчик Twilio здесь.

Ваша проблема здесь в том, что вы используете verification API, который предназначен для одноразовой проверки номера телефона и не использует приложение Authy.

Вместо этого вам нужны API для одноразовых паролей. Я не знаю, что не так с руководством, на которое вы ссылаетесь, но весь код для приложения можно найти здесь:https://github.com/TwilioDevEd/account-security-quickstart-django.

Дайте мне знать, если это вообще поможет.