socket.io通过cookie发送jwt

时间:2018-01-05 04:33:30

标签: javascript node.js cookies socket.io

我正在尝试使用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();

1 个答案:

答案 0 :(得分:0)

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

  

WS Server(摘录)

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

希望有所帮助