2026-10-11 22:32:13 +03:00
|
|
|
|
# MicrosoftLoginDialog.qml
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Окно входа в аккаунт Microsoft. Работает так же, как официальный лаунчер: страница входа
|
|
|
|
|
|
открывается внутри приложения в `WebEngineView`, а лаунчер ждёт, когда браузер перейдёт на
|
|
|
|
|
|
`redirect_uri` с кодом в адресе.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Файл попадает в QML-модуль, только если CMake нашёл `Qt6::WebEngineQuick`. Поэтому
|
|
|
|
|
|
[Main](Main.md) не объявляет окно в разметке, а создаёт его через `Qt.createComponent()` при первом
|
|
|
|
|
|
входе (`openMicrosoftLogin()`).
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
## Интерфейс
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
| | |
|
|
|
|
|
|
|---|---|
|
|
|
|
|
|
| `backend` (required) | `LauncherBackend` |
|
|
|
|
|
|
| `openAt(url)` | открыть страницу входа |
|
|
|
|
|
|
| `failed(message)` | вход не удался. Окно ничего не знает о плашке сообщений главного окна и сообщает о неудаче сигналом |
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
## Как работает
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
На каждое `urlChanged` вызывается `handleUrl()`. Он передаёт адрес в
|
|
|
|
|
|
`backend.inspectMicrosoftRedirect()`. Разбор сделан в C++, чтобы правила совпадали с тем, как
|
|
|
|
|
|
[MsaAuthService](../cpp/MsaAuthService.md) строит `redirect_uri`.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Когда адрес совпал:
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
- окно закрывается, `codeTaken` выставляется в `true`;
|
|
|
|
|
|
- если есть код, вызывается `backend.finishMicrosoftLogin(code)`;
|
|
|
|
|
|
- если кода нет, вызывается `backend.cancelMicrosoftLogin()` и испускается `failed` с текстом от
|
|
|
|
|
|
Microsoft или общим «вход не завершён».
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
`codeTaken` нужен потому, что `WebEngineView` может сообщить об одном и том же адресе несколько
|
|
|
|
|
|
раз, а отдавать код дважды нельзя.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Кнопка «Отмена» выставляет `codeTaken`, закрывает окно и вызывает `cancelMicrosoftLogin()`. Щелчок
|
|
|
|
|
|
мимо окна и Esc его не закрывают.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
## Куки
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Профиль браузера создаётся через `WebEngineProfilePrototype` без `storageName`, то есть только в
|
|
|
|
|
|
памяти. Куки живут, пока работает лаунчер, и в общий браузер не попадают. Выбрать другой аккаунт
|
|
|
|
|
|
в пределах одного запуска позволяет `prompt=select_account` в адресе входа.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
При создании этого документа использовался ИИ.
|