Files
BiLauncher/doc/qml/MicrosoftLoginDialog.md
T

46 lines
2.7 KiB
Markdown
Raw Permalink Normal View History

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