【问题标题】:Authenticate Adonis Websocket Connections验证 Adonis Websocket 连接
【发布时间】:2020-10-09 04:47:02
【问题描述】:

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

【问题讨论】:

    标签: node.js authentication websocket jwt adonis.js


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 2015-05-11
      • 2019-03-15
      • 2017-05-01
      • 1970-01-01
      相关资源
      最近更新 更多