/
kochkatech
/
CorpGame
Обзор
Документация
Войти
/
kochkatech
/
CorpGame
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
dev
backend/src/auth/jwt.util.ts
42 строки
2 KB
kochkareal
chore: добавлен .gitattributes, нормализованы переносы строк (LF везде, кроме .bat/.cmd)
06 авг 2026, 15:18
06 авг 2026, 15:18
c25ef1b
Код
Авторство
О чём код?
import jwt from 'jsonwebtoken'; // Никакого дефолта: main.ts проверяет наличие JWT_SECRET на старте (assertRequiredEnv) — // если процесс дошёл сюда без него, лучше упасть явно, чем подписывать токены известным всем секретом. function requireSecret(): string { const secret = process.env.JWT_SECRET; if (!secret) throw new Error('JWT_SECRET не задан — подпись/проверка токенов невозможна'); return secret; } const SECRET = requireSecret(); export interface AdminTokenPayload { role: 'admin'; } export interface TeamTokenPayload { role: 'team'; teamId: string; sessionId: string; playerId: string; } // Алгоритм фиксирован явно с обеих сторон (подпись и проверка), а не оставлен на дефолт // библиотеки: так подмена заголовка токена на другой алгоритм не имеет смысла — verify // откажет ещё до попытки проверить подпись. const ALGORITHM = 'HS256'; export function signAdminToken(): string { return jwt.sign({ role: 'admin' } as AdminTokenPayload, SECRET, { expiresIn: '12h', algorithm: ALGORITHM }); } export function signTeamToken(payload: Omit<TeamTokenPayload, 'role'>): string { return jwt.sign({ role: 'team', ...payload } as TeamTokenPayload, SECRET, { expiresIn: '12h', algorithm: ALGORITHM, }); } export function verifyToken<T>(token: string): T { return jwt.verify(token, SECRET, { algorithms: [ALGORITHM] }) as T; }