Добавление учетной записи: OAuth/Refresh Token двухканальный и лучшие практики
В Antigravity Tools «добавление учетной записи» — это запись refresh_token Google учетной записи в локальный пул учетных записей, чтобы последующие запросы обратного прокси могли ротационно использовать его. Вы можете авторизоваться через OAuth в один клик или напрямую вставить refresh_token для ручного добавления.
Чему вы научитесь
- Добавить учетные записи в Antigravity Tools через OAuth или Refresh Token
- Скопировать/вручную открыть ссылку авторизации и после успешного обратного вызова автоматически завершить добавление
- При возникновении проблем с получением
refresh_tokenили сбоем обратного вызова наlocalhostвы будете знать, как с этим обращаться
Ваша текущая ситуация
- Вы нажали «OAuth авторизация», но крутится спиннер или браузер сообщает
localhost refused to connect - Авторизация прошла успешно, но выводит «Не получен Refresh Token»
- У вас только
refresh_token, и вы не знаете, как一次性 массово импортировать
Когда использовать этот метод
- Вы хотите использовать самый надежный способ добавления учетной записи (приоритет OAuth)
- Вам больше важна возможность миграции/резервного копирования (Refresh Token больше подходит как «актив пула учетных записей»)
- Вам нужно добавить много учетных записей, вы хотите массово импортировать
refresh_token(поддерживается извлечение из текста/JSON)
🎒 Подготовка к началу
- Вы уже установили и можете открыть Antigravity Tools
- Вы знаете, где вход: в боковой панели перейдите на страницу
Accounts(маршрут см.source/lbjlaq/Antigravity-Manager/src/App.tsx)
В этом уроке два ключевых слова
OAuth: вид «переход в браузер для входа и авторизации». Antigravity Tools локально временно создаст адрес обратного вызова (http://localhost/127.0.0.1/[::1]:<port>/oauth-callback в зависимости от системной ситуации IPv4/IPv6), дождется code из браузера, а затем обменяет token. (реализация см. source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/oauth_server.rs)
refresh_token: вид «доверенный токен, который можно использовать долгосрочно для обновления access_token». При добавлении учетной записи в этом проекте он будет использован сначала для обмена на access_token, а затем получит реальный email от Google для сохранения на диск. (реализация см. source/lbjlaq/Antigravity-Manager/src-tauri/src/commands/mod.rs)
Основная идея
Суть «добавления учетной записи» в Antigravity Tools — это сделать две вещи:
- Найти доступный
refresh_token - Использовать его для обмена на access_token, а затем получить реальный email от Google и записать учетную запись в локальный пул учетных записей
Оно предоставляет три входа:
- Импорт/экспорт JSON: подходит, когда вам явно нужно сделать «управляемое резервное копирование»
- Импорт из DB: подходит, когда вы берете состояние входа Antigravity/IDE как авторитетный источник (по умолчанию ищет
state.vscdb, также поддерживает ручной выбор файла) - Импорт из V1: подходит для автоматического сканирования и импорта старых данных из каталога V1
Кроме того, есть путь «автоматическая синхронизация»: она будет периодически читать refresh_token в DB, если он отличается от текущей учетной записи, автоматически выполнит импорт из DB; если он совпадает, то пропустит, чтобы сэкономить трафик.
Следуйте за нами
Шаг 1: откройте диалог «Добавление учетной записи»
Почему Все входы для добавления единогласно собраны на странице Accounts.
В Antigravity Tools откройте страницу Accounts, нажмите кнопку Add Account справа (компонент: AddAccountDialog).
Вы должны увидеть: всплывает диалог с тремя вкладками: OAuth / Refresh Token / Import (см. source/lbjlaq/Antigravity-Manager/src/components/accounts/AddAccountDialog.tsx).
Шаг 2: в первую очередь используйте OAuth авторизацию в один клик (рекомендуется)
Почему Это путь по умолчанию, рекомендуемый продуктом: приложение само генерирует ссылку авторизации, автоматически открывает браузер, а после обратного вызова автоматически завершает сохранение.
- Переключитесь на вкладку
OAuth. - Сначала скопируйте ссылку авторизации: после открытия диалога он автоматически вызовет
prepare_oauth_urlдля предварительной генерации URL (вызов фронтенда см.AddAccountDialog.tsx:111-125; генерация и прослушивание см.oauth_server.rs). - Нажмите Start OAuth (соответствует фронтенду
startOAuthLogin()/ бэкендуstart_oauth_login), чтобы приложение открыло браузер по умолчанию и начало ждать обратного вызова.
Вы должны увидеть:
- В диалоге появляется копируемая ссылка авторизации (имя события:
oauth-url-generated) - Браузер открывает страницу авторизации Google; после авторизации происходит перенаправление на локальный адрес, и отображается «Authorization Successful!» (
oauth_success_html())
Шаг 3: когда OAuth не завершается автоматически, используйте «Завершить OAuth» для ручного завершения
Почему Процесс OAuth разделен на два этапа: браузер авторизуется и получает code, затем приложение использует code для обмена на token. Даже если вы не нажимали «Start OAuth», пока вы вручную откроете ссылку авторизации и завершите обратный вызов, диалог будет пытаться автоматически завершиться; если не завершилось, вы можете вручную нажать один раз.
- Если вы «скопировали ссылку в свой браузер» (а не в браузер по умолчанию), после обратного вызова авторизации приложение получит событие
oauth-callback-receivedи автоматически вызоветcompleteOAuthLogin()(см.source/lbjlaq/Antigravity-Manager/src/components/accounts/AddAccountDialog.tsx:67-109). - Если вы не видите автоматического завершения, нажмите в диалоге кнопку Finish OAuth (соответствует бэкенду
complete_oauth_login).
Вы должны увидеть: диалог подсказывает об успехе и автоматически закрывается; в списке Accounts появляется новая учетная запись.
Совет: при сбое обратного вызова сначала скопируйте ссылку
Бэкенд будет стараться одновременно прослушивать IPv6 ::1 и IPv4 127.0.0.1, и в зависимости от ситуации прослушивания выберет localhost/127.0.0.1/[::1] как адрес обратного вызова, в основном чтобы избежать «браузер разбирает localhost как IPv6» вызывающего сбой подключения. (см. source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/oauth_server.rs:53-113)
Шаг 4: ручное добавление через Refresh Token (поддерживает пакет)
Почему Когда вы не можете получить refresh_token (или вам больше важна возможность миграции), прямое добавление через Refresh Token более контролируемо.
- Переключитесь на вкладку
Refresh Token. - Вставьте
refresh_tokenв текстовое поле.
Поддерживаемые формы ввода (фронтенд будет разбирать и массово добавлять):
| Тип ввода | Пример | Логика разбора |
|---|---|---|
| Чистый текст token | 1//abc... | Регулярное извлечение: /1\/\/[a-zA-Z0-9_\-]+/g (см. AddAccountDialog.tsx:213-220) |
| Встроенный в большой фрагмент текста | логи/экспорт текст содержит несколько 1//... | Регулярное массовое извлечение и дедупликация (см. AddAccountDialog.tsx:213-224) |
| Массив JSON | [{"refresh_token":"1//..."}] | Разбор массива и извлечение item.refresh_token (см. AddAccountDialog.tsx:198-207) |
После нажатия Confirm диалог будет по очереди вызывать onAdd("", token) для каждого token (см. AddAccountDialog.tsx:231-248), в итоге перейдет к бэкенду add_account.
Вы должны увидеть:
- Диалог отображает прогресс пакетной обработки (например
1/5) - После успеха в списке
Accountsпоявляются новые учетные записи
Шаг 5: подтвердите, что «пул учетных записей доступен»
Почему Успешное добавление не равно «немедленно можно стабильно использовать». После успешного добавления бэкенд автоматически запустит «обновление квоты», а при работе Proxy попытается перезагрузить token pool, чтобы изменения вступили в силу немедленно.
Вы можете подтвердить следующими двумя сигналами:
- Учетная запись появляется в списке и отображает email (email берется от бэкенда
get_user_info, а не email, который вы ввели). - Квота/информация о подписке начинает обновляться (бэкенд автоматически вызовет
internal_refresh_account_quota)
Вы должны увидеть: после добавления нет необходимости вручную нажимать обновление, учетные записи начинают появляться информация о квоте (в зависимости от того, отобразится ли интерфейс).
Контрольная проверка ✅
- [ ] В списке
Accountsвы можете увидеть новую учетную запись с email - [ ] Нет состояния «loading» дольше вашего допустимого времени (после обратного вызова OAuth должно быстро завершиться)
- [ ] Если вы работаете с Proxy, новые учетные записи могут быстро участвовать в планировании (бэкенд попытается перезагрузить)
Предостережения
1) OAuth выдает «Не получен Refresh Token»
Бэкенд при start_oauth_login/complete_oauth_login будет явно проверять, существует ли refresh_token; если нет, вернет текст с решением (см. source/lbjlaq/Antigravity-Manager/src-tauri/src/commands/mod.rs:45-56).
Согласно подсказкам в исходном коде:
- Откройте
https://myaccount.google.com/permissions - Отзовите доступ Antigravity Tools
- Вернитесь в приложение и снова пройдите OAuth
Вы также можете перейти на путь Refresh Token этого урока.
2) Браузер сообщает localhost refused to connect
Обратный вызов OAuth требует, чтобы браузер отправил запрос на адрес обратного вызова. Для снижения вероятности сбоя бэкенд будет:
- Попытаться одновременно прослушивать
127.0.0.1и::1 - Когда оба доступны, использовать
localhost, в противном случае принудительно использовать127.0.0.1или[::1]
Соответствующая реализация см. source/lbjlaq/Antigravity-Manager/src-tauri/src/modules/oauth_server.rs:53-113.
3) переключение на другую вкладку отменит подготовку OAuth
Когда диалог переключается с OAuth на другую вкладку, фронтенд вызовет cancelOAuthLogin() и очистит URL (см. AddAccountDialog.tsx:127-136).
Если вы в процессе авторизации, не спешите переключать вкладку.
4) правильный/неправильный пример Refresh Token
| Пример | Распознается ли | Причина |
|---|---|---|
1//0gAbC... | ✓ | Соответствует правилу префикса 1// (см. AddAccountDialog.tsx:215-219) |
ya29.a0... | ✗ | Не соответствует правилу извлечения фронтенда, будет считаться недопустимым вводом |
Итог урока
- OAuth: подходит для «быстро», также поддерживает копирование ссылки в ваш часто используемый браузер и автоматическое/ручное завершение
- Refresh Token: подходит для «надежно и с возможностью миграции», и поддерживает массовое извлечение
1//...из текста/JSON - При отсутствии
refresh_tokenследуйте подсказкам об ошибке: отзовите доступ затем заново пройдите OAuth, либо перейдите на Refresh Token
Предупреждение к следующему уроку
Следующий урок мы делаем более надежное: превращаем пул учетных записей в «актив с возможностью миграции».
Перейдите к изучению Резервное копирование и миграция: импорт/экспорт, горячая миграция V1/DB.
Вы узнаете:
- Как экспортировать пул учетных записей в файл JSON (только email + refresh_token)
- Как на новой машине импортировать этот JSON и быстро восстановить пул учетных записей
Приложение: ссылки на исходный код
Нажмите, чтобы раскрыть расположение исходного кода
Дата обновления: 2026-01-23
| Функция | Путь к файлу | Строка |
|---|---|---|
| Страница Accounts монтирует диалог добавления | src/pages/Accounts.tsx | 267-731 |
| OAuth URL предгенерация + событие автоматического завершения обратного вызова | src/components/accounts/AddAccountDialog.tsx | 49-125 |
Событие обратного вызова OAuth запускает completeOAuthLogin() | src/components/accounts/AddAccountDialog.tsx | 67-109 |
| Пакетный разбор и дедупликация Refresh Token | src/components/accounts/AddAccountDialog.tsx | 185-268 |
| Фронтенд вызывает команды Tauri (add/OAuth/cancel) | src/services/accountService.ts | 5-91 |
| Бэкенд add_account: игнорирует email, использует refresh_token для получения реального email и сохранения на диск | src-tauri/src/commands/mod.rs | 19-60 |
| Бэкенд OAuth: проверяет отсутствие refresh_token и дает решение с отозвом | src-tauri/src/commands/mod.rs | 38-79 |
| Сервер обратного вызова OAuth: одновременно прослушивает IPv4/IPv6 и выбирает redirect_uri | src-tauri/src/modules/oauth_server.rs | 43-113 |
| --- | --- | --- |
Ключевые имена событий:
oauth-url-generated: после генерации OAuth URL бэкенд отправляет на фронтенд (см.oauth_server.rs:250-252)oauth-callback-received: после получения обратного вызова и разбора code бэкенд уведомляет фронтенд (см.oauth_server.rs:177-180/oauth_server.rs:232-235)
Ключевые команды:
prepare_oauth_url: предгенерировать ссылку авторизации и запустить прослушивание обратного вызова (см.src-tauri/src/commands/mod.rs:469-473)start_oauth_login: открыть браузер по умолчанию и ждать обратного вызова (см.src-tauri/src/commands/mod.rs:339-401)complete_oauth_login: не открывать браузер, только ждать обратного вызова и завершить обмен на token (см.src-tauri/src/commands/mod.rs:405-467)add_account: сохранить учетную запись с помощью refresh_token (см.src-tauri/src/commands/mod.rs:19-60)