Files
core/docs/oauth-setup.md
Untone 26f28aa35e
All checks were successful
Deploy on push / deploy (push) Successful in 7m2s
[0.9.23] - 2025-09-23
### Fixed
- 🔧 **OAuth Callback URL**: Исправлено формирование callback URL - добавлен отсутствующий слеш между доменом и путем
- 🔒 **OAuth HTTPS**: Принудительное использование HTTPS для callback URL в продакшне (исправляет ошибку "redirect_uri is not associated")

### Changed
- 🔄 **OAuth Routes**: Возвращены к стандартному формату `/oauth/{provider}` - провайдеры не передают параметр provider в callback
2025-09-24 09:33:02 +03:00

5.9 KiB
Raw Blame History

🔐 Настройка OAuth Провайдеров

🎯 Архитектура OAuth

Важно понимать разделение:

  • Frontend: testing.discours.io - где пользователь нажимает кнопку входа
  • Backend: v3.dscrs.site - где обрабатывается OAuth логика
  • Callback URL: Всегда должен указывать на backend (v3.dscrs.site)

🔄 OAuth Flow (пошагово):

  1. Пользователь на testing.discours.io нажимает "Войти через GitHub"
  2. Фронтенд редиректит на v3.dscrs.site/oauth/github
  3. Backend редиректит на github.com с callback_uri=v3.dscrs.site/oauth/github/callback
  4. GitHub после авторизации редиректит на v3.dscrs.site/oauth/github/callback
  5. Backend обрабатывает callback и редиректит обратно на testing.discours.io

🎯 Быстрая настройка

1. Google OAuth

  1. Перейти в Google Cloud Console
  2. Создать проект или выбрать существующий
  3. APIs & ServicesCredentialsCreate CredentialsOAuth 2.0 Client ID
  4. Application type: Web application
  5. Authorized redirect URIs:
    • https://v3.dscrs.site/oauth/google/callback ⚠️ ОБЯЗАТЕЛЬНО HTTPS
    • http://localhost:8000/oauth/google/callback (для разработки)
  6. Скопировать Client ID и Client Secret

Переменные окружения:

GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret

2. GitHub OAuth

  1. Перейти в GitHub Developer Settings
  2. New OAuth App
  3. Authorization callback URL: https://v3.dscrs.site/oauth/github/callback ⚠️ ОБЯЗАТЕЛЬНО HTTPS
  4. Скопировать Client ID и Client Secret

Переменные окружения:

GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret

3. VK OAuth

  1. Перейти в VK Developers
  2. Создать приложениеВеб-сайт
  3. НастройкиRedirect URI: https://v3.dscrs.site/oauth/vk/callback ⚠️ ОБЯЗАТЕЛЬНО HTTPS
  4. Скопировать ID приложения и Защищённый ключ

Переменные окружения:

VK_CLIENT_ID=your_vk_app_id
VK_CLIENT_SECRET=your_vk_secure_key

4. Facebook OAuth

  1. Перейти в Facebook Developers
  2. My AppsCreate AppConsumer
  3. Facebook LoginSettings
  4. Valid OAuth Redirect URIs: https://v3.dscrs.site/oauth/facebook/callback ⚠️ ОБЯЗАТЕЛЬНО HTTPS
  5. Скопировать App ID и App Secret

Переменные окружения:

FACEBOOK_CLIENT_ID=your_facebook_app_id
FACEBOOK_CLIENT_SECRET=your_facebook_app_secret

5. Yandex OAuth

  1. Перейти в Yandex OAuth
  2. Создать новое приложение
  3. Callback URI: https://v3.dscrs.site/oauth/yandex/callback ⚠️ ОБЯЗАТЕЛЬНО HTTPS
  4. Права: login:info, login:email, login:avatar
  5. Скопировать ID и Пароль

Переменные окружения:

YANDEX_CLIENT_ID=your_yandex_client_id
YANDEX_CLIENT_SECRET=your_yandex_client_secret

🚀 Развертывание

Локальная разработка

# .env файл
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
# и т.д.

Продакшн (Dokku/Heroku)

# Установка переменных окружения
dokku config:set myapp GOOGLE_CLIENT_ID=xxx GOOGLE_CLIENT_SECRET=yyy
# или
heroku config:set GOOGLE_CLIENT_ID=xxx GOOGLE_CLIENT_SECRET=yyy

Проверка настройки

  1. Перезапустить приложение
  2. Проверить логи: OAuth provider google: id=SET, key=SET
  3. Тестовый вход: https://v3.dscrs.site/oauth/google

🔍 Диагностика проблем

Ошибка "Provider not configured":

  • Проверить переменные окружения
  • Убедиться что значения не пустые
  • Перезапустить приложение

Ошибка redirect_uri_mismatch:

  • Проверить точное соответствие URL в настройках провайдера
  • Убедиться что протокол (http/https) совпадает
  • ВАЖНО: Callback URL должен указывать на backend (v3.dscrs.site), НЕ на frontend (testing.discours.io)

Ошибка "redirect_uri is not associated with this application":

  • Callback URL в настройках провайдера должен быть https://v3.dscrs.site/oauth/{provider}/callback
  • ОБЯЗАТЕЛЬНО HTTPS (не HTTP) для продакшна
  • НЕ указывать frontend URL в настройках провайдера
  • Проверить что URL в настройках GitHub точно совпадает с тем что отправляет код

VK ошибка "Code challenge method is unsupported":

  • Это нормально, VK не поддерживает PKCE
  • Система автоматически обрабатывает это

📞 Поддержка

При проблемах проверить:

  1. Логи приложения при запуске
  2. Настройки redirect URI у провайдера
  3. Корректность переменных окружения