【问题标题】: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();
}
希望对你有帮助