This commit is contained in:
@@ -160,7 +160,7 @@ core/
|
|||||||
### Environment Variables
|
### Environment Variables
|
||||||
- `DATABASE_URL` - Database connection string
|
- `DATABASE_URL` - Database connection string
|
||||||
- `REDIS_URL` - Redis connection string
|
- `REDIS_URL` - Redis connection string
|
||||||
- `JWT_SECRET` - JWT signing secret
|
- `JWT_SECRET_KEY` - JWT signing secret
|
||||||
- `OAUTH_*` - OAuth provider credentials
|
- `OAUTH_*` - OAuth provider credentials
|
||||||
|
|
||||||
### Database
|
### Database
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ SESSION_COOKIE_SAMESITE=lax
|
|||||||
SESSION_COOKIE_MAX_AGE=2592000 # 30 дней
|
SESSION_COOKIE_MAX_AGE=2592000 # 30 дней
|
||||||
|
|
||||||
# JWT
|
# JWT
|
||||||
JWT_SECRET=your_jwt_secret_key
|
JWT_SECRET_KEY=your_jwt_secret_key
|
||||||
JWT_EXPIRATION_HOURS=720 # 30 дней
|
JWT_EXPIRATION_HOURS=720 # 30 дней
|
||||||
|
|
||||||
# Redis
|
# Redis
|
||||||
|
|||||||
@@ -520,7 +520,7 @@ async def test_redis_integration():
|
|||||||
### Подготовка
|
### Подготовка
|
||||||
- [ ] Настроен Redis connection pool с теми же параметрами
|
- [ ] Настроен Redis connection pool с теми же параметрами
|
||||||
- [ ] Установлены зависимости: `auth.tokens.*`, `auth.utils`
|
- [ ] Установлены зависимости: `auth.tokens.*`, `auth.utils`
|
||||||
- [ ] Настроены environment variables (JWT_SECRET, REDIS_URL)
|
- [ ] Настроены environment variables (JWT_SECRET_KEY, REDIS_URL)
|
||||||
|
|
||||||
### Реализация
|
### Реализация
|
||||||
- [ ] Реализована функция извлечения токенов из запросов
|
- [ ] Реализована функция извлечения токенов из запросов
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
```python
|
```python
|
||||||
# settings.py
|
# settings.py
|
||||||
JWT_ALGORITHM = "HS256" # HMAC with SHA-256
|
JWT_ALGORITHM = "HS256" # HMAC with SHA-256
|
||||||
JWT_SECRET = os.getenv("JWT_SECRET") # Минимум 256 бит
|
JWT_SECRET_KEY = os.getenv("JWT_SECRET_KEY") # Минимум 256 бит
|
||||||
JWT_EXPIRATION_DELTA = 30 * 24 * 60 * 60 # 30 дней
|
JWT_EXPIRATION_DELTA = 30 * 24 * 60 * 60 # 30 дней
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -439,7 +439,7 @@ async def detect_anomalies(user_id: str, event_type: str, ip_address: str):
|
|||||||
### Environment Variables
|
### Environment Variables
|
||||||
```bash
|
```bash
|
||||||
# JWT Security
|
# JWT Security
|
||||||
JWT_SECRET=your_super_secret_key_minimum_256_bits
|
JWT_SECRET_KEY=your_super_secret_key_minimum_256_bits
|
||||||
JWT_ALGORITHM=HS256
|
JWT_ALGORITHM=HS256
|
||||||
JWT_EXPIRATION_HOURS=720
|
JWT_EXPIRATION_HOURS=720
|
||||||
|
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ async def delete_session(token: str) -> bool:
|
|||||||
|
|
||||||
### JWT токены
|
### JWT токены
|
||||||
- **Алгоритм**: HS256
|
- **Алгоритм**: HS256
|
||||||
- **Secret**: Из переменной окружения JWT_SECRET
|
- **Secret**: Из переменной окружения JWT_SECRET_KEY
|
||||||
- **Payload**: `{user_id, username, iat, exp}`
|
- **Payload**: `{user_id, username, iat, exp}`
|
||||||
- **Expiration**: 30 дней (настраивается)
|
- **Expiration**: 30 дней (настраивается)
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# JWT настройки
|
# JWT настройки
|
||||||
JWT_SECRET=your_super_secret_key_minimum_256_bits
|
JWT_SECRET_KEY=your_super_secret_key_minimum_256_bits
|
||||||
JWT_ALGORITHM=HS256
|
JWT_ALGORITHM=HS256
|
||||||
JWT_EXPIRATION_HOURS=720 # 30 дней
|
JWT_EXPIRATION_HOURS=720 # 30 дней
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ LOCKOUT_DURATION=1800 # 30 минут
|
|||||||
# Проверка переменных окружения
|
# Проверка переменных окружения
|
||||||
python -c "
|
python -c "
|
||||||
import os
|
import os
|
||||||
required = ['JWT_SECRET', 'REDIS_URL', 'GOOGLE_CLIENT_ID']
|
required = ['JWT_SECRET_KEY', 'REDIS_URL', 'GOOGLE_CLIENT_ID']
|
||||||
for var in required:
|
for var in required:
|
||||||
print(f'{var}: {\"✅\" if os.getenv(var) else \"❌\"}')"
|
print(f'{var}: {\"✅\" if os.getenv(var) else \"❌\"}')"
|
||||||
|
|
||||||
@@ -213,7 +213,7 @@ ab -n 1000 -c 10 -p login.json -T application/json http://localhost:8000/graphql
|
|||||||
### Docker
|
### Docker
|
||||||
```dockerfile
|
```dockerfile
|
||||||
# Dockerfile
|
# Dockerfile
|
||||||
ENV JWT_SECRET=your_secret_here
|
ENV JWT_SECRET_KEY=your_secret_here
|
||||||
ENV REDIS_URL=redis://redis:6379/0
|
ENV REDIS_URL=redis://redis:6379/0
|
||||||
ENV SESSION_COOKIE_SECURE=true
|
ENV SESSION_COOKIE_SECURE=true
|
||||||
```
|
```
|
||||||
@@ -221,8 +221,8 @@ ENV SESSION_COOKIE_SECURE=true
|
|||||||
### Dokku/Heroku
|
### Dokku/Heroku
|
||||||
```bash
|
```bash
|
||||||
# Установка переменных окружения
|
# Установка переменных окружения
|
||||||
dokku config:set myapp JWT_SECRET=xxx REDIS_URL=yyy
|
dokku config:set myapp JWT_SECRET_KEY=xxx REDIS_URL=yyy
|
||||||
heroku config:set JWT_SECRET=xxx REDIS_URL=yyy
|
heroku config:set JWT_SECRET_KEY=xxx REDIS_URL=yyy
|
||||||
```
|
```
|
||||||
|
|
||||||
### Nginx настройки
|
### Nginx настройки
|
||||||
|
|||||||
@@ -330,7 +330,7 @@ OAuth данные хранятся в JSON поле `oauth` модели `Autho
|
|||||||
### Переменные окружения
|
### Переменные окружения
|
||||||
```bash
|
```bash
|
||||||
# JWT настройки
|
# JWT настройки
|
||||||
JWT_SECRET=your_super_secret_key
|
JWT_SECRET_KEY=your_super_secret_key
|
||||||
JWT_EXPIRATION_HOURS=720 # 30 дней
|
JWT_EXPIRATION_HOURS=720 # 30 дней
|
||||||
|
|
||||||
# Redis подключение
|
# Redis подключение
|
||||||
|
|||||||
@@ -819,7 +819,7 @@ jobs:
|
|||||||
pytest tests/auth/e2e/ -m e2e
|
pytest tests/auth/e2e/ -m e2e
|
||||||
env:
|
env:
|
||||||
REDIS_URL: redis://localhost:6379/0
|
REDIS_URL: redis://localhost:6379/0
|
||||||
JWT_SECRET: test_secret_key_for_ci
|
JWT_SECRET_KEY: test_secret_key_for_ci
|
||||||
|
|
||||||
- name: Upload coverage
|
- name: Upload coverage
|
||||||
uses: codecov/codecov-action@v3
|
uses: codecov/codecov-action@v3
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ env_vars:{variable_name} # STRING - значение перемен
|
|||||||
|
|
||||||
### Примеры переменных
|
### Примеры переменных
|
||||||
```redis
|
```redis
|
||||||
GET env_vars:JWT_SECRET # Секретный ключ JWT
|
GET env_vars:JWT_SECRET_KEY # Секретный ключ JWT
|
||||||
GET env_vars:REDIS_URL # URL Redis
|
GET env_vars:REDIS_URL # URL Redis
|
||||||
GET env_vars:OAUTH_GOOGLE_CLIENT_ID # Google OAuth Client ID
|
GET env_vars:OAUTH_GOOGLE_CLIENT_ID # Google OAuth Client ID
|
||||||
GET env_vars:FEATURE_REGISTRATION # Флаг функции регистрации
|
GET env_vars:FEATURE_REGISTRATION # Флаг функции регистрации
|
||||||
@@ -135,7 +135,7 @@ GET env_vars:FEATURE_REGISTRATION # Флаг функции регистра
|
|||||||
|
|
||||||
**Категории переменных**:
|
**Категории переменных**:
|
||||||
- **database**: DB_URL, POSTGRES_*
|
- **database**: DB_URL, POSTGRES_*
|
||||||
- **auth**: JWT_SECRET, OAUTH_*
|
- **auth**: JWT_SECRET_KEY, OAUTH_*
|
||||||
- **redis**: REDIS_URL, REDIS_HOST, REDIS_PORT
|
- **redis**: REDIS_URL, REDIS_HOST, REDIS_PORT
|
||||||
- **search**: SEARCH_*
|
- **search**: SEARCH_*
|
||||||
- **integrations**: GOOGLE_ANALYTICS_ID, SENTRY_DSN, SMTP_*
|
- **integrations**: GOOGLE_ANALYTICS_ID, SENTRY_DSN, SMTP_*
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ OAUTH_CLIENTS = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Настройки JWT
|
# Настройки JWT
|
||||||
JWT_SECRET = os.getenv("JWT_SECRET", "your-secret-key")
|
JWT_SECRET_KEY = os.getenv("JWT_SECRET_KEY", "your-secret-key")
|
||||||
JWT_ACCESS_TOKEN_EXPIRE_MINUTES = 30
|
JWT_ACCESS_TOKEN_EXPIRE_MINUTES = 30
|
||||||
JWT_REFRESH_TOKEN_EXPIRE_DAYS = int(environ.get("JWT_REFRESH_TOKEN_EXPIRE_DAYS", "30"))
|
JWT_REFRESH_TOKEN_EXPIRE_DAYS = int(environ.get("JWT_REFRESH_TOKEN_EXPIRE_DAYS", "30"))
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ class EnvService:
|
|||||||
"POSTGRES_HOST": "database",
|
"POSTGRES_HOST": "database",
|
||||||
"POSTGRES_PORT": "database",
|
"POSTGRES_PORT": "database",
|
||||||
# Auth
|
# Auth
|
||||||
"JWT_SECRET": "auth",
|
"JWT_SECRET_KEY": "auth",
|
||||||
"JWT_ALGORITHM": "auth",
|
"JWT_ALGORITHM": "auth",
|
||||||
"JWT_EXPIRATION": "auth",
|
"JWT_EXPIRATION": "auth",
|
||||||
"SECRET_KEY": "auth",
|
"SECRET_KEY": "auth",
|
||||||
@@ -103,7 +103,7 @@ class EnvService:
|
|||||||
|
|
||||||
# Секретные переменные (не показываем их значения в UI)
|
# Секретные переменные (не показываем их значения в UI)
|
||||||
SECRET_VARIABLES: ClassVar[set[str]] = {
|
SECRET_VARIABLES: ClassVar[set[str]] = {
|
||||||
"JWT_SECRET",
|
"JWT_SECRET_KEY",
|
||||||
"SECRET_KEY",
|
"SECRET_KEY",
|
||||||
"AUTH_SECRET",
|
"AUTH_SECRET",
|
||||||
"OAUTH_GOOGLE_CLIENT_SECRET",
|
"OAUTH_GOOGLE_CLIENT_SECRET",
|
||||||
@@ -127,7 +127,7 @@ class EnvService:
|
|||||||
"POSTGRES_DB": "Имя базы данных PostgreSQL",
|
"POSTGRES_DB": "Имя базы данных PostgreSQL",
|
||||||
"POSTGRES_HOST": "Хост PostgreSQL",
|
"POSTGRES_HOST": "Хост PostgreSQL",
|
||||||
"POSTGRES_PORT": "Порт PostgreSQL",
|
"POSTGRES_PORT": "Порт PostgreSQL",
|
||||||
"JWT_SECRET": "Секретный ключ для JWT токенов",
|
"JWT_SECRET_KEY": "Секретный ключ для JWT токенов",
|
||||||
"JWT_ALGORITHM": "Алгоритм подписи JWT",
|
"JWT_ALGORITHM": "Алгоритм подписи JWT",
|
||||||
"JWT_EXPIRATION": "Время жизни JWT токенов",
|
"JWT_EXPIRATION": "Время жизни JWT токенов",
|
||||||
"SECRET_KEY": "Секретный ключ приложения",
|
"SECRET_KEY": "Секретный ключ приложения",
|
||||||
|
|||||||
Reference in New Issue
Block a user