Я создаю REST api в nodejs с jsonwebtoken для аутентификации. Проблема в том, что я создал свое собственное промежуточное программное обеспечение маршрута, которое декодирует токен и устанавливает req.session, а также свойство объекта промежуточного программного обеспечения для декодированного значения токена, но я могу получить доступ только к req.session в маршрутизаторе .post (), но не может получить доступ к этому свойству sessiondata, установленному в функции промежуточного программного обеспечения.
Ниже мой пример кода
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 недоступен для всего приложения, поэтому я подумал, что может потребоваться AuthenticateLib и получить доступ к свойству sessiondata в моих файлах везде, где мне нужно получить доступ к моему сеансу.
Моя цель состоит в том, чтобы иметь доступ к данным моей сессии не только в router.post, но и в любом другом файле приложения.
Я пробовал добавить AuthenticateLib.sessiondata = req.session; сразу после строки router.post все работает нормально, но это единственный способ. Почему свойство sessiondata, установленное в промежуточном программном обеспечении, не работает. Также как я могу решить проблемы параллелизма, связанные со свойством sessiondata.
Любая помощь будет оценена по достоинству.
AuthenticateLib.sessiondata
используется для всех запросов из того, что я вижу, а это означает, что ваш сайт никогда не может поддерживать более одного одновременного пользователя. - person robertklep   schedule 15.04.2017AuthenticateLib.sessiondata
- это одно и то же свойство для каждого запроса, поэтому оно будет перезаписано каждым запросом, вызывающимverifyToken
, независимо от того, от имени какого пользователя был сделан этот запрос. - person robertklep   schedule 15.04.2017req
(или данные изreq
, которые требуются) передаются по всему приложению. - person robertklep   schedule 15.04.2017req
. - person robertklep   schedule 15.04.2017req
или необходимые данные в качестве аргумента. Везде вам это нужно. Вот и все. - person robertklep   schedule 15.04.2017req
, вы должны передатьObj
(или инкапсулировать весь код, требующий доступа кmysessiondata
, с помощью этой функции). - person robertklep   schedule 20.04.2017