Otentikasi Koneksi Adonis Websocket

Adonis.js Versi 4.x

Jadi masalahnya adalah saya tidak dapat menambahkan header Otorisasi di sisi klien untuk menggunakan middleware Adonis/Middleware/Auth untuk mengautentikasi Token JWT saya.

Jadi yang saya lakukan adalah membuat middleware pelanggan untuk mengotorisasi koneksi soket, sekarang saya bisa mendapatkan token yang saya lewati. Jadi sekarang bagaimana cara memeriksa apakah token itu valid? Saya belum melihat dokumentasi yang bagus tentang bagian ini, terima kasih sebelumnya atas bantuannya!

Sisi Klien

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()

Sisi Server

// 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 sumber


Jawaban (1)


Jadi saya hanya menggunakan plugin jsonwebtoken untuk memverifikasi apakah token jwt valid.

Berikut adalah middlewarenya:

'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