Аутентификация және сессия API
Кіру қысқа мерзімді челлендж, Telegram растау және түпнұсқа браузерді басқарудың дәлелін қажет етеді. Клиент ұсынған Telegram ID тұлғаның дәлелі емес.
Осы бетте
Кіруді бастау#
POST /api/auth/telegram/start бос JSON объектісін {} қабылдайды. Ол нақты қолданба Origin және қолжетімді ботты талап етеді. Сервер 300 секундқа созылатын челлендж және қорғалған браузер-дәлел cookie файлын жасайды.
201 жауабы challengeId, code, expiresAt және telegramUrl қамтиды. Дәлел cookie терең сілтемеден алынып тасталады және JavaScript үшін қолжетімсіз. Шектеу — хэштелген мекенжайға минутына алты бастау.
const response = await fetch('/api/auth/telegram/start', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: '{}'
});
const challenge = await response.json();
// Show code and telegramUrl to the user.Растауды күту#
POST /api/auth/telegram/complete {challengeId} қабылдайды. Ол Origin және түпнұсқа браузер-дәлел cookie файлын талап етеді. Растауға дейін жауап 202 {status: "pending"} болады.
Растаудан кейін 200 status=authenticated, user, csrfToken және expiresAt қайтарады. Сессия бір рет беріледі. Мерзімі өткен челленджтер 410; пайдаланылған немесе жойылған челленджтер 409 қайтарады.
const response = await fetch('/api/auth/telegram/complete', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ challengeId: challenge.challengeId })
});
if (response.status === 202) {
// Poll again after a delay; do not create a new challenge.
}Сессияны оқу#
GET /api/auth/me жарамды сессия болмағанда 200 {authenticated:false} қайтарады. Кіру жауабы user, CSRF токені және мерзімді қамтиды.
__Host-kevmi-session cookie файлы Secure, HttpOnly, SameSite=Lax және Path=/ параметрлерімен 24 сағатқа дейін сақталады. Дерекқор оның токенінің SHA-256 хэшін сақтайды. Профиль формасы cookie файлын оқи да, ауыстыра да алмайды.
Есептік жазба өзгерістері#
Мутациялар сессияны, нақты Origin және ағымдағы X-CSRF-Token талап етеді. Sec-Fetch-Site: cross-site қабылданбайды. Сервер ерікті CORS қолжетімділігін ұсынбайды.
Есептік жазба ID-і сұраныс енгізуінен емес, сессиядан алынады. Жетіспейтін және басқа пайдаланушының жазбалары иеленушілік туралы нақты мәліметтерді ашпайды.
Шығу#
POST /api/auth/logout ағымдағы сессияны аяқтайды және cookie файлын тазартады. Origin және CSRF қажет; дене оқылмайды. Telegram /logout барлық есептік жазба сессияларын да аяқтайды.
Cookie файлдары басқа доменге автоматты түрде ауыспайды. Қызмет доменін өзгерткенде APP_ORIGIN және бот вебхукын жаңартыңыз, содан кейін қайта кіріңіз.