All checks were successful
Deploy on push / deploy (push) Successful in 7m2s
### Fixed - 🔧 **OAuth Callback URL**: Исправлено формирование callback URL - добавлен отсутствующий слеш между доменом и путем - 🔒 **OAuth HTTPS**: Принудительное использование HTTPS для callback URL в продакшне (исправляет ошибку "redirect_uri is not associated") ### Changed - 🔄 **OAuth Routes**: Возвращены к стандартному формату `/oauth/{provider}` - провайдеры не передают параметр provider в callback
145 lines
5.9 KiB
Markdown
145 lines
5.9 KiB
Markdown
# 🔐 Настройка 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. Корректность переменных окружения
|