项目服务端用的nodejs,在高并发(1000人同时访问)情况下会出现返回用户数据错乱的问题; 项目调用了微信登陆接口,微信结果返回后,将用户信息(用户id等)用 jsonwebtoken 签名成token返回客户端,客户端每次请求都会在请求头带上该token。服务端解析token获取用户id等敏感信息后再从mongodb数据库中获取信息返回客户端 高并发情况下,同样的token,后端返回的数据偶尔出现错乱,用户A拿到的是用户B的数据。在访问人数不多的情况下又不会出现该问题,生成的token值应该是不会重复的。 服务器用的Window serve 2012 用IIS反向代理到node服务,node服务用forever守护进程。
这是生成token的代码: ** let content = { _id: user._id }; // 要生成token的主题信息 let secretOrPrivateKey = global.tokenKey;// 这是加密的key(密钥) let token = jwt.sign(content, secretOrPrivateKey, { expiresIn: 60 * 60 * 4 // 4小时过期 }); res.jsonp({ status: 1, mess: 'ok', token: token, }) //返回token**
这是解密token的中间件: let token = req.get("Authorization"); // 从Authorization中获取token let secretOrPrivateKey = global.tokenKey; // 这是加密的key(密钥) jwt.verify(token, secretOrPrivateKey, (err, decode)=> { if (err) { // 时间失效的时候 || 伪造的token res.send({'status':0,mess:"登录超时,请重新进入"}); } else { req.query.userInfo = decode;//记录解析出来的数据 next(); } })
**有大佬遇到过类似的问题么?困扰我很久了,望解答,下面附上部分代码,谢谢~!**