我在node.js中使用express + passport.js. 并希望确保我的RestAPI。我已将会话中的令牌设置为:
saveUser = function (req, res) {
User.findOrCreate({ user_id: req.body.user_id, user_name: req.body.username })
.success(function(result){
req.session.token = 'dfgsfd4g564fg456d4gsgsdfg4';
res.send({status:"ok"});
}).error(function(error){
res.send(error);
}); };
但这是在req.sessionStore.sessions中设置的原因。 并且每次更改密钥以便如何从req.sessionStore.sessions访问令牌。?
sessionStore:
{ sessions: { E8DRcn3lWkTfAJb3FsPnoeaF: '{"cookie":{"originalMaxAge":null,"expires":null,"secure":true,"httpOnly":true,"path":"/"},"passport":{},"username":"testing.user","token":"3iqZ31YdUaTtyvI6"}' },
generate: [Function],
_events: { disconnect: [Function], connect: [Function] } },
sessionID: 'Ykl9ONPvbxsTOa9Fonb6GFEP',
session:
{ cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true,
secure: true },
passport: {} },
我的app.js文件中的此配置。
app.configure (function () {
app.use (express.cookieParser());
app.use (express.bodyParser ());
app.use (express.methodOverride ());
app.use (express.session({ secret: 'secret_code' })); // session secret
app.use (flash());
app.use (express.json());
app.use (passport.initialize());
app.use (passport.session());
app.use (express.static(path.join(__dirname, 'public')));
app.set ('view engine', 'ejs');
app.use (app.router);
});
先谢谢。
答案 0 :(得分:1)
您不应该与sessionStore交互,您始终可以在req.session中按会话级别访问您的会话。
所以,要设置一个令牌,你就做对了:
req.session.token = 'some token';
并在后续请求中访问它,即。在身份验证中间件中,您可以检查req.session.token,如下所示:
function someMiddleware(req, res, next) {
if(req.session && req.session.token) {
User.validateToken(req.session.token, function(err, valid){
if(!err && valid) {
next();
} else {
next(new Error('Token not valid.'));
}
}); // or something like that
} else {
next(new Error('No session token');
}
};
我不确定,但我认为即使是护照也会通过其策略做出类似的事情。