有没有办法与JWT保持服务器端会话?

时间:2016-08-08 08:31:12

标签: node.js session express socket.io jwt

我在我的应用程序中使用JWT并且我定义了我的声明:

const claims = {
   iss: process.env.DOMAIN, // The URL of your service
   sub: user.email, // The UID of the user in your system
   scope: "game",
   email: user.email
};

虽然这种方法运行正常,但我并不喜欢将会话数据添加到声明对象中,这使得它也可以在前端使用。相反,我想仅在后端保留某些会话数据,例如:

nJwt.verify(socket.handshake.query.token, app.get("jwt.secret"), (err, decoded) => {
    if (err) return;
    // pseudo code
    Session.of(decoded.body.email).get("cheater_accuracy"); // 0.48912715
});

对我而言,理想的方法是将索赔对象保持为这样简单:

const claims = {
   iss: process.env.DOMAIN,
   sub: user.email,
   scope: "game",
   email: user.email
};

并且仅在后端保留每个会话数据,这可以在任何时候由令牌引用。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以使用Redis存储会话数据并通过令牌访问它。使用SET在发出令牌时存储您的价值,并使用GET将其恢复原状。

答案 1 :(得分:0)

我认为快速会话应该有效,用法通常是:

app.use(express.cookieParser());
app.use(express.session({secret: 'yoursecretword'}));


app.get('/some-page', function(req, res) {
   req.session.lastPage = '/laspage';
   res.send('Some response');
});

看看:http://blog.modulus.io/nodejs-and-express-sessions