我创造的NodeJS中的REST API与jsonwebtoken为authentication.Problem是我创造我自己的路线中间件,解码令牌和套req.session以及作为解码标记值的中间件对象属性,但我只能访问router.post()方法中的req.session,但无法访问在中间件功能中设置的sessiondata属性。变量不是在整个应用程序的NodeJS访问+并发问题
下面是我的示例代码
user.js的
var router=require('express').Router();
var AuthenticateLib=require('app/libraries/authentication');
router.post('/updateprofile',AuthenticateLib.verifyToken,function(req,res){
console.log(req.session); // is accessible over here
console.log(AuthenticateLib.sessiondata) // prints null
});
authentication.js
module.exports={
sessiondata:null,
verifyToken:function(req,res,next){
var token = req.headers.authorization;
return jwt.verifyAsync(token,config.getParam('security.jwtSecret'))
.then(decoded => {
req.session=decoded;
this.sessiondata=decoded;
next();
})
.catch(...)
}}
我创建sessiondata属性,因为REQ对象未遍布应用avaliable,所以我想可能是我可以要求AuthenticateLib的,并在我需要访问我的会话的任何地方访问我的文件中的sessiondata属性。
我的目标是,我应该能够访问不仅router.post但在应用程序的任何其他文件我的会话数据。
我试着添加AuthenticateLib.sessiondata = req.session;只是在router.post行之后,一切正常,但它是唯一的方法。为什么不设置中间件sessiondata属性不起作用。 另外我该如何解决与sessiondata属性相关的并发问题。
任何帮助,将不胜感激。
即使它可以工作,“AuthenticateLib.sessiondata”将在我看到的所有请求之间共享,这意味着您的站点永远不会支持多个并发用户。如果多个并发用户已登录会有AuthenticateLib.sessiondata的多个副本按user.correct我,如果我错了 – robertklep
AuthenticateLib.sessiondata生活会只为user.So的这一请求.sessiondata'是每个请求的相同属性,所以它将被每个调用'verifyToken'的请求覆盖,而不管代表哪个用户发出了请求。 – Vibhas
你错了:)'AuthenticateLib – robertklep