fix: use csrf_user_token from cookies as auth token
This commit is contained in:
parent
e478807aa4
commit
4c98d27e72
@ -2,7 +2,7 @@
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"execution_count": 13,
|
||||
"id": "f28552f1-618c-4853-92e2-566554a2de2c",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
@ -12,7 +12,7 @@
|
||||
"True"
|
||||
]
|
||||
},
|
||||
"execution_count": 1,
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@ -28,7 +28,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"execution_count": 14,
|
||||
"id": "953d142e-a575-41b7-927d-8cd1546d2747",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
|
||||
Binary file not shown.
@ -51,8 +51,8 @@ class KworkClient:
|
||||
|
||||
Аутентификация:
|
||||
Клиент использует двухэтапную аутентификацию Kwork:
|
||||
1. POST /signIn — получение session cookies
|
||||
2. POST /getWebAuthToken — получение web_auth_token
|
||||
1. POST /signIn - получение session cookies
|
||||
2. POST /getWebAuthToken - получение web_auth_token
|
||||
|
||||
Примеры использования:
|
||||
# Вход по логину/паролю
|
||||
@ -99,7 +99,7 @@ class KworkClient:
|
||||
token: Web auth token, полученный через `getWebAuthToken` или `login()`.
|
||||
Если указан, автоматически добавляется в cookies.
|
||||
cookies: Session cookies из предыдущей аутентификации.
|
||||
Обычно не требуется — устанавливаются автоматически из token.
|
||||
Обычно не требуется - устанавливаются автоматически из token.
|
||||
timeout: Таймаут HTTP запросов в секундах. По умолчанию 30 секунд.
|
||||
base_url: Кастомный базовый URL. Используется только для тестирования.
|
||||
|
||||
@ -197,8 +197,8 @@ class KworkClient:
|
||||
Аутентификация по логину и паролю.
|
||||
|
||||
Выполняет двухэтапный процесс аутентификации Kwork:
|
||||
1. POST /signIn — проверка учётных данных, получение session cookies
|
||||
2. POST /getWebAuthToken — обмен cookies на web_auth_token
|
||||
1. POST /signIn - проверка учётных данных, получение session cookies
|
||||
2. POST /getWebAuthToken - обмен cookies на web_auth_token
|
||||
|
||||
Полученный токен и cookies сохраняются в клиенте для последующих запросов.
|
||||
|
||||
@ -264,19 +264,25 @@ class KworkClient:
|
||||
raise KworkAuthError(f"Login failed: {response.status_code}")
|
||||
|
||||
response_data = response.json()
|
||||
|
||||
# Extract userId from response or cookies
|
||||
cookies = dict(response.cookies)
|
||||
user_id = response_data.get("user_id") or cookies.get("userId")
|
||||
|
||||
# Debug: print response for troubleshooting
|
||||
import logging
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.debug(f"Login response: {response_data}")
|
||||
logger.debug(f"Login cookies: {cookies}")
|
||||
|
||||
# Extract userId from cookies
|
||||
user_id = cookies.get("userId")
|
||||
|
||||
if not user_id:
|
||||
raise KworkAuthError("Login failed: no userId in response")
|
||||
raise KworkAuthError(f"Login failed: no userId in cookies. Response: {response_data}")
|
||||
|
||||
# Extract web_auth_token from response
|
||||
web_token = response_data.get("web_auth_token") or cookies.get("web_auth_token")
|
||||
# Extract auth token from cookies (Kwork uses csrf_user_token or slrememberme)
|
||||
web_token = cookies.get("csrf_user_token") or cookies.get("slrememberme")
|
||||
|
||||
if not web_token:
|
||||
raise KworkAuthError("No web_auth_token in response")
|
||||
raise KworkAuthError(f"No auth token in cookies. Cookies: {cookies}")
|
||||
|
||||
# Create new client with token
|
||||
return cls(token=web_token, cookies=cookies, timeout=timeout)
|
||||
@ -430,14 +436,14 @@ class KworkClient:
|
||||
Args:
|
||||
page: Номер страницы для пагинации (начиная с 1).
|
||||
category_id: ID категории для фильтрации.
|
||||
Если None — все категории.
|
||||
Если None - все категории.
|
||||
sort: Опция сортировки. Варианты:
|
||||
- "recommend" — по рекомендации (по умолчанию)
|
||||
- "price_asc" — по возрастанию цены
|
||||
- "price_desc" — по убыванию цены
|
||||
- "rating" — по рейтингу
|
||||
- "reviews" — по количеству отзывов
|
||||
- "newest" — по дате создания
|
||||
- "recommend" - по рекомендации (по умолчанию)
|
||||
- "price_asc" - по возрастанию цены
|
||||
- "price_desc" - по убыванию цены
|
||||
- "rating" - по рейтингу
|
||||
- "reviews" - по количеству отзывов
|
||||
- "newest" - по дате создания
|
||||
|
||||
Returns:
|
||||
CatalogResponse содержащий:
|
||||
@ -571,7 +577,7 @@ class KworkClient:
|
||||
Args:
|
||||
page: Номер страницы (начиная с 1).
|
||||
category_id: ID категории для фильтрации.
|
||||
Если None — все категории.
|
||||
Если None - все категории.
|
||||
|
||||
Returns:
|
||||
ProjectsResponse содержащий:
|
||||
@ -609,7 +615,7 @@ class KworkClient:
|
||||
независимо от их статуса (открыт, в работе, завершён).
|
||||
|
||||
Returns:
|
||||
Список проектов где текущий пользователь — заказчик.
|
||||
Список проектов где текущий пользователь - заказчик.
|
||||
|
||||
Example:
|
||||
orders = await client.projects.get_payer_orders()
|
||||
@ -627,7 +633,7 @@ class KworkClient:
|
||||
назначен исполнителем.
|
||||
|
||||
Returns:
|
||||
Список проектов где текущий пользователь — исполнитель.
|
||||
Список проектов где текущий пользователь - исполнитель.
|
||||
|
||||
Example:
|
||||
work = await client.projects.get_worker_orders()
|
||||
@ -691,11 +697,11 @@ class KworkClient:
|
||||
"""
|
||||
Получить отзывы пользователя.
|
||||
|
||||
Если user_id не указан — возвращает отзывы текущего пользователя.
|
||||
Если указан — отзывы другого пользователя по ID.
|
||||
Если user_id не указан - возвращает отзывы текущего пользователя.
|
||||
Если указан - отзывы другого пользователя по ID.
|
||||
|
||||
Args:
|
||||
user_id: ID пользователя. Если None — текущий пользователь.
|
||||
user_id: ID пользователя. Если None - текущий пользователь.
|
||||
page: Номер страницы для пагинации (начиная с 1).
|
||||
|
||||
Returns:
|
||||
@ -811,7 +817,7 @@ class KworkClient:
|
||||
"""
|
||||
Получить доступные дополнительные функции (features).
|
||||
|
||||
Features — это платные дополнения к кворкам:
|
||||
Features - это платные дополнения к кворкам:
|
||||
- Увеличенные сроки
|
||||
- Дополнительные правки
|
||||
- Приоритетная поддержка
|
||||
@ -996,7 +1002,7 @@ class KworkClient:
|
||||
"""
|
||||
Получить пользовательские предпочтения (wants).
|
||||
|
||||
Wants — это настройки интересов пользователя:
|
||||
Wants - это настройки интересов пользователя:
|
||||
- Предпочитаемые категории
|
||||
- Ключевые слова для мониторинга
|
||||
- Фильтры для поиска
|
||||
|
||||
Loading…
Reference in New Issue
Block a user