ตรวจสอบสิทธิ์การเชื่อมต่อ 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