@ nestjs / websockets with Guards завершается неудачно с host.setType - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь добавить аутентификацию JWT в nestJs WebSockets. Я могу подключиться и отправить заголовок со стороны клиента. Тем не менее, я получаю сообщение об ошибке TypeError: host.setType is not a function при настройке nestJs WebSocket с защитой. enter image description here

Ошибка возникает из ws-proxy.js enter image description here Возвращаемое значение из ExecutionContextHost не имеет свойства / метода с именем setType но в строке 27: используется

Файл My Guard.ts выглядит следующим образом.

import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import * as configs from 'config';
import { Socket } from 'socket.io';
import { JwtService } from '@nestjs/jwt';
import { JwtPayload } from '../jwt-payload.interface';
import { WsException } from '@nestjs/websockets';

@Injectable()
export class JwtGuard implements CanActivate {
  constructor(private readonly jwtService: JwtService) { }

  async canActivate(context: ExecutionContext): Promise<boolean> {

    try {
      const client: Socket = context.switchToWs().getClient<Socket>();
      const authHeader: string = client.handshake.headers.authorization;
      const authToken = authHeader.substring(7, authHeader.length);
      const jwtPayload: JwtPayload = await this.jwtService.verifyAsync(authToken, configs.get('JWT.publicKey'));
      const user: any = this.validateUser(jwtPayload);

      context.switchToWs().getData().user = user;
      return Boolean(user);
    } catch (err) {
      throw new WsException(err.message);
    }
  }

  validateUser(payload: JwtPayload): any {
    return payload;
  }
}

Файл сокета:

import { SubscribeMessage, WebSocketGateway } from '@nestjs/websockets';
import { Socket } from 'socket.io';
import { UseGuards} from '@nestjs/common';
import { JwtGuard } from '../../../common/authentication/jwt-guard/jwt.guard';

@UseGuards(JwtGuard)
@WebSocketGateway()
export class ContractGateway {
  @SubscribeMessage('message')
  handleMessage(client: Socket, payload: any): Boolean {
    return true;
  }
}

Кто-нибудь сталкивался с такимошибка и как ее устранить?

1 Ответ

0 голосов
/ 10 октября 2019

Обнаружена проблема, конфликт пакетов между "@nestjs/websockets": "^6.8.2" & "@nestjs/core": "^6.0.0",. Мне нужно обновить все пакеты @nestjs

...