Аутентификация подключений Adonis Websocket

Adonis.js версии 4.x

Итак, проблема в том, что я не могу добавить заголовок авторизации на стороне клиента, чтобы использовать промежуточное ПО Adonis/Middleware/Auth для аутентификации моего токена JWT.

Итак, я сделал промежуточное ПО клиента для авторизации сокет-соединения, теперь я могу получить токен, который я передал. Итак, как мне проверить, действителен ли этот токен? Я не видел хорошей документации по этой части, большое спасибо за помощь!

Клиентская сторона

import Ws from '@adonisjs/websocket-client'

const ws = Ws('ws://0.0.0.0:3001', {
      path: 'adonis-ws'
})

const jwtToken = cookie.get('auth._token.local')

ws
   .withJwtToken(jwtToken)
   .connect()

На стороне сервера

// start/socket.js
const Ws = use('Ws')
Ws.channel('order', 'OrderController').middleware(['socketAuth'])
// start/wsKernel.js
const Ws = use('Ws')

const namedMiddleware = {
  socketAuth: 'App/Middleware/SocketAuthentication'
}

Ws
  .registerGlobal(globalMiddleware)
  .registerNamed(namedMiddleware)
// app/Middleware/SocketAuthentication.js
class SocketAuthentication {
  async wsHandle ({ request, auth }, next) {
    try {
      const { token } = request.all()
      // Authenticate the error in this part :(
      await next()
    } catch (error) {
      console.log(error)
    }
  }
}

module.exports = SocketAuthentication

person frost kazuma    schedule 09.10.2020    source источник


Ответы (1)


Поэтому я просто использовал плагин jsonwebtoken, чтобы проверить, действителен ли токен jwt.

Вот промежуточное ПО:

'use strict'
const Env = use('Env')
const jwt = require('jsonwebtoken')

class SocketAuthentication {
  /**
  * @param {object} ctx
  * @param {Request} ctx.request
  * @param {Function} next
  */
  async wsHandle ({ request, auth }, next) {
    const { token } = request.all()
    const appKey = auth.authenticatorInstance._config.options.secret
    const jwtToken = token.split(' ')[1]
    jwt.verify(jwtToken, appKey)
    await next()
  }
}

module.exports = SocketAuthentication
person frost kazuma    schedule 10.10.2020