我正在尝试使用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();
答案 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();
}
希望有所帮助