/
viktorphp
/
back-socket
Обзор
Документация
Войти
/
viktorphp
/
back-socket
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/auth/jwt.strategy.ts
36 строк
2 KB
Viktorphp84
release/D-24.001.00: add username to jwt payload, add user presence check
17 дек 2024, 18:21
17 дек 2024, 18:21
8940fb6
Код
Авторство
О чём код?
import { Injectable } from '@nestjs/common'; import { PassportStrategy } from '@nestjs/passport'; import { /* ExtractJwt, */ Strategy } from 'passport-jwt'; import { Request } from 'express'; import { ConfigService } from '@nestjs/config'; // Стратегия для аутентификации с использованием JWT @Injectable() // Говорит, что этот класс должен быть внедрен как зависимость в другие компоненты NestJS export class JwtStrategy extends PassportStrategy(Strategy) { constructor(configService: ConfigService) { super({ // jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), // Указывает, что токен будет извлекаться из заголовка Authorization в формате Bearer token jwtFromRequest: (req: Request) => { const data = req.cookies['access_token']; if (!data) { return null; } return data; }, // Указывает, что токен будет извлекаться из куки ignoreExpiration: true, // Указывает, что следует игнорировать истечение срока действия токена secretOrKey: configService.get('jwt.secret'), // Секретный ключ, используемый для подписи и верификации JWT }); } async validate(payload: { sub: string; email: string }) { return { userId: payload.sub, username: payload.email }; } } /* Когда пользователь отправляет JWT токен, Passport.js автоматически перехватывает запрос. Сначала проверяется подпись токена с помощью secretOrKey. Если подпись верна, токен декодируется в payload (полезную нагрузку). Если подпись неверна, то выбрасывается исключение UnauthorizedException. */