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.

Вернуться на верх