Привет! К сожалению, не предоставив конкретные детали об ошибке, сложно дать точный ответ на ваш вопрос. Однако, я могу предложить несколько общих рекомендаций по использованию JwtWSGuard с веб-сокетами в NestJS. 1. Убедитесь, что вы правильно настроили JWT-авторизацию в вашем приложении NestJS. Это включает в себя установку и настройку пакета `@nestjs/jwt`, создание токена и его верификацию при получении запроса. Убедитесь, что ваш гвард для JWT (`JwtGuard`) работает верно для ваших HTTP-маршрутов. 2. Проверьте, правильно ли настроен гвард для Websocket (`JwtWSGuard`). Убедитесь, что вы правильно прокидываете токен в запросе Websocket, чтобы он мог быть проверен и аутентифицирован. Это может потребовать настроек вашего клиента Websocket. 3. Проверьте, правильно ли вы перехватываете и обрабатываете ошибки. Вам может потребоваться добавить обработчик ошибок в ваш гвард, чтобы отлавливать и обрабатывать возможные ошибки аутентификации или проверки токена. 4. Убедитесь, что ваши HTTP- и Websocket-маршруты настроены правильно для использования гварда. Убедитесь, что вы добавили гвард к соответствующим маршрутам с помощью декораторов `UseGuards()` и `UseGuards(JwtWSGuard)`. Если вы сможете предоставить больше информации о своей проблеме или коде, связанном с гвардом для Websocket, я смогу дать более точный ответ и помочь вам решить проблему.
import { ExecutionContext } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; export class WsAuthGuard extends AuthGuard('wsjwt') { constructor() { super(); } getRequest(context: ExecutionContext) { return context.switchToWs().getClient().handshake; } } import { Injectable, UnauthorizedException } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { PassportStrategy } from '@nestjs/passport'; import { ExtractJwt, Strategy } from 'passport-jwt'; @Injectable() export class WsJwtStrategy extends PassportStrategy(Strategy, 'wsjwt') { constructor(private readonly configService: ConfigService) { super({ ignoreExpiration: false, secretOrKey: configService.get('jwt.token.secret'), jwtFromRequest: ExtractJwt.fromExtractors([ (request: Request) => { const token = this.getTokenFromWebSocket(request.headers?.cookie); return token; }, ]), }); } private getTokenFromWebSocket(cookie: string): string | null { return this.getCookieValue(cookie, '_Secure-access-token'); } private getCookieValue(cookieString: string, cookieName: string) { const cookies = cookieString.split('; '); for (const cookie of cookies) { const [name, value] = cookie.split('='); if (name === cookieName) { return value; } } return null; } async validate(payload: any) { if (!payload) new UnauthorizedException(); return { userId: payload.sub, phone: payload.phone, email: payload.email, type: payload.type, }; } }