2.7 KiB
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 в адресе входа.
При создании этого документа использовался ИИ.