【问题标题】:socket.io send jwt via cookiesocket.io 通过 cookie 发送 jwt
【发布时间】:2018-05-03 23:07:33
【问题描述】:

我正在尝试使用 jwt 进行身份验证。现在我使用 socket-jwt 来完成这个任务。我将 jwt 存储在 localStorage 中。但是对于我的其他 http 请求(例如:fetch),我使用护照和 cookie 进行身份验证。我想用socket.io做同样的事情(通过cookie发送令牌)。有没有办法将 jwt 发送到 socke.io 进行身份验证?

以下是我当前的代码。

//server side
io.use(socketioJwt.authorize({

  secret: config.secret,
  handshake: true
}));

//client side
var socket = io({query: 'token='+localStorage.getItem("token")}).connect();

【问题讨论】:

    标签: javascript node.js cookies socket.io


    【解决方案1】:

    我遇到了同样的问题,我用这种方式解决了,但是没有 Passport (Socke.io v2.1.0):

    WS 服务器(摘录)

    import io = require('socket.io');
    
    sioServer = new io(httpServer)
    
    sioServer.of(namespace).use((socket, next)=>{
    
    wsTokenVerify(socket, next);
    
    })
    

    wsTokenVerify(socket, next)

        async  wsTokenVerify(_socket:Socket, _next: NextFunction) {
    
        let cookie = _socket.request.headers.cookie
        let token = parsCookie(cookie);
         try{
             decodedJWT= await jwt.verify(token,this.RSA_PUBLIC_KEY,{ 
              algorithms: ['RS256']});
          } catch(err){
                sendJsonResponse(_res, 401, err);
    
             }
            _next();
        }
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2011-05-17
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多