Files
BiLauncher/doc/qml/MicrosoftLoginDialog.md
T
2026-10-11 22:32:13 +03:00

2.7 KiB
Raw Permalink Blame History

MicrosoftLoginDialog.qml

Окно входа в аккаунт Microsoft. Работает так же, как официальный лаунчер: страница входа открывается внутри приложения в WebEngineView, а лаунчер ждёт, когда браузер перейдёт на redirect_uri с кодом в адресе.

Файл попадает в QML-модуль, только если CMake нашёл Qt6::WebEngineQuick. Поэтому Main не объявляет окно в разметке, а создаёт его через Qt.createComponent() при первом входе (openMicrosoftLogin()).

Интерфейс

backend (required) LauncherBackend
openAt(url) открыть страницу входа
failed(message) вход не удался. Окно ничего не знает о плашке сообщений главного окна и сообщает о неудаче сигналом

Как работает

На каждое urlChanged вызывается handleUrl(). Он передаёт адрес в backend.inspectMicrosoftRedirect(). Разбор сделан в C++, чтобы правила совпадали с тем, как MsaAuthService строит redirect_uri.

Когда адрес совпал:

  • окно закрывается, codeTaken выставляется в true;
  • если есть код, вызывается backend.finishMicrosoftLogin(code);
  • если кода нет, вызывается backend.cancelMicrosoftLogin() и испускается failed с текстом от Microsoft или общим «вход не завершён».

codeTaken нужен потому, что WebEngineView может сообщить об одном и том же адресе несколько раз, а отдавать код дважды нельзя.

Кнопка «Отмена» выставляет codeTaken, закрывает окно и вызывает cancelMicrosoftLogin(). Щелчок мимо окна и Esc его не закрывают.

Куки

Профиль браузера создаётся через WebEngineProfilePrototype без storageName, то есть только в памяти. Куки живут, пока работает лаунчер, и в общий браузер не попадают. Выбрать другой аккаунт в пределах одного запуска позволяет prompt=select_account в адресе входа.


При создании этого документа использовался ИИ.