Аутентификация сокетного соединения с использованием JWT & Loopback 4 - PullRequest
0 голосов
/ 16 января 2020

Я следовал следующему примеру для создания приложения чата с использованием LB4 и Socket.io, и теперь мне нужно защитить приложение с помощью JWT. Как я могу интегрировать стратегию JWT, которая упоминается в следующем справочнике как часть моей архитектуры приложения. Можно ли сделать что-то подобное?

@ws.connect()
@authenticate('jwt')
  connect(socket: Socket) {
    console.log('Client connected: %s', this.socket.id);
    socket.join('room 1');
  }

1 Ответ

0 голосов
/ 20 января 2020

Для меня я использую Перехватчики .

  • Создать перехватчик
  • получить Handeshake объект
  • аутентифицировать это

Примерно так:

1. На стороне клиента создайте socket объект с помощью Socket.io

const socket = io(
    `YOUR_URL`,
    {
        "transports": ["websocket", "polling", "flashsocket"],
        "query": { "authorization": `Bearer ${token}` } // <= token in here
    }
);
создать перехватчик и затем использовать его в контроллере сокета
export const SocketAuth = (): Interceptor => {
    return async (invocationCtx, next) => {
        const handshake: Handeshake = (invocationCtx.target as any).socket.handshake;
        // ...
    }
}
@ws('/chat')
export class ChatController {

    @intercept(SocketAuth) // <= !!!!
    @ws.connect()
    async connect(socket: Socket) {
        // ...
    }

}
...