QR-код шведского банковского идентификатора Взаимодействие сервера и клиента в Django
Это сообщение связано с моим последним сообщением
BankID имеет возможность предложить анимированную генерацию QR-кода для авторизации. Он генерирует новый QR-код каждую секунду, и вы сканируете его с помощью мобильного приложения, а затем их сервер возвращает успешный результат, когда пользователь вводит свой код или сканирует отпечаток пальца. Можно просто пропустить QR-код и попросить bankID пинговать пользователя для ввода кода для авторизации, но я хочу иметь функциональность QR-кода для своего приложения.
Теперь мой вопрос заключается в следующем. Когда отправляется POST запрос, Views получает qr_start_token и qr_start_secret, возвращаемые с сервера bankID. Views ждет изменения статуса от сервера BankID, чтобы что-то сделать, но это оставляет меня в замешательстве относительно того, как я могу отобразить изменяющийся QR-код на клиенте. Как я могу сделать это без рендеринга новой страницы, передачи секрета через контекст и использования javascript для воспроизведения этого процесса?
Вот соответствующий код:
if request.META['HTTP_USER_AGENT']:
ua_string = request.META['HTTP_USER_AGENT']
user_agent = parse(ua_string)
if user_agent.is_pc:
status=client.collect(order_ref=auth["orderRef"])["status"]
order_time = time.time()
while status == "pending":
qr_start_token = auth["qrStartToken"]
qr_start_secret = auth["qrStartSecret"]
print(qr_start_secret)
qr_time = str(int(time.time() - order_time))
qr_auth_code = hmac.new(qr_start_secret.encode(), qr_time.encode(), hashlib.sha256).hexdigest()
qr_data = ".".join(["bankid", qr_start_token, qr_time, qr_auth_code])
print(f'qr_data: {qr_data}')
status=client.collect(order_ref=auth["orderRef"])["status"]
print(status)
# qr = segno.make(qr_data)
# qr.save('media/img/temp/' + personal_number + '.png')
if status == "complete":
print("Logged on")
dj_login(request, user)
return render(request, 'home/auth-login-Success.html')
if status == "failed":
print("Logon Failed")
return render(request, 'home/auth-login-Failed.html')
time.sleep(1)
Как вы видите, я могу сохранить QR-код с помощью segno, и это отлично работает, но я все еще могу использовать JavaScript для загрузки его на страницу, потому что клиент заблокирован в ожидании Success от сервера BankID.