# 🔐 Настройка 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](https://console.cloud.google.com/) 2. Создать проект или выбрать существующий 3. **APIs & Services** → **Credentials** → **Create Credentials** → **OAuth 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** **Переменные окружения:** ```bash GOOGLE_CLIENT_ID=your_google_client_id GOOGLE_CLIENT_SECRET=your_google_client_secret ``` ### 2. GitHub OAuth 1. Перейти в [GitHub Developer Settings](https://github.com/settings/developers) 2. **New OAuth App** 3. **Authorization callback URL**: `https://v3.dscrs.site/oauth/github/callback` ⚠️ **ОБЯЗАТЕЛЬНО HTTPS** 4. Скопировать **Client ID** и **Client Secret** **Переменные окружения:** ```bash GITHUB_CLIENT_ID=your_github_client_id GITHUB_CLIENT_SECRET=your_github_client_secret ``` ### 3. VK OAuth 1. Перейти в [VK Developers](https://dev.vk.com/apps) 2. **Создать приложение** → **Веб-сайт** 3. **Настройки** → **Redirect URI**: `https://v3.dscrs.site/oauth/vk/callback` ⚠️ **ОБЯЗАТЕЛЬНО HTTPS** 4. Скопировать **ID приложения** и **Защищённый ключ** **Переменные окружения:** ```bash VK_CLIENT_ID=your_vk_app_id VK_CLIENT_SECRET=your_vk_secure_key ``` ### 4. Facebook OAuth 1. Перейти в [Facebook Developers](https://developers.facebook.com/) 2. **My Apps** → **Create App** → **Consumer** 3. **Facebook Login** → **Settings** 4. **Valid OAuth Redirect URIs**: `https://v3.dscrs.site/oauth/facebook/callback` ⚠️ **ОБЯЗАТЕЛЬНО HTTPS** 5. Скопировать **App ID** и **App Secret** **Переменные окружения:** ```bash FACEBOOK_CLIENT_ID=your_facebook_app_id FACEBOOK_CLIENT_SECRET=your_facebook_app_secret ``` ### 5. Yandex OAuth 1. Перейти в [Yandex OAuth](https://oauth.yandex.ru/) 2. **Создать новое приложение** 3. **Callback URI**: `https://v3.dscrs.site/oauth/yandex/callback` ⚠️ **ОБЯЗАТЕЛЬНО HTTPS** 4. **Права**: `login:info`, `login:email`, `login:avatar` 5. Скопировать **ID** и **Пароль** **Переменные окружения:** ```bash YANDEX_CLIENT_ID=your_yandex_client_id YANDEX_CLIENT_SECRET=your_yandex_client_secret ``` ## 🚀 Развертывание ### Локальная разработка ```bash # .env файл GOOGLE_CLIENT_ID=... GOOGLE_CLIENT_SECRET=... GITHUB_CLIENT_ID=... GITHUB_CLIENT_SECRET=... # и т.д. ``` ### Продакшн (Dokku/Heroku) ```bash # Установка переменных окружения 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. Корректность переменных окружения