В воображаемом модуле сеанса, как показано ниже, может быть пропущена переменная _sessData
между запросами. Например, может быть, пользователь только что вошел в систему, и в то же время вызываемый isAuthed() создается для другого пользователя. Это может быть проблема? Этот модуль будет вызываться по каждому запросу, поэтому я думаю, что это безопасно, но подтверждение было бы замечательным.Узел/commonJS может «закрывать» переменную утечку между запросами
module.exports = function(app) {
var _sessData = null;
function Session() {
//
}
Session.prototype.set = function(payload) {
Cookies.set('session', payload);
_sessData = payload;
}
Session.prototype.isAuthed = function() {
return _sessData && Object.keys(_sessData).length > 0;
}
Session.prototype.clear = function() {
Cookies.set('session', '');
_sessData = {};
}
Object.defineProperty(app.context, 'Session', {
// Not exaclty sure what is happening here with this and _ctx..
// Note: apprently ctx is bound to the middleware when call()ing
get: function() { return new Session(this); }
});
return function * (next) {
var token = Cookies.get('jwt');
if (! token) {
_sessData = {};
return yield* next;
}
try {
_sessData = jwt.verify(token, SECRET);
} catch(e) {
if (e.name === 'TokenExpiredError') {
this.Session.clear();
}
}
yield* next;
}
}
EDIT:
Модуль привыкают в приложении KoaJS как так (выше модуль не производит должного KoaJS промежуточное программное обеспечение, но это рядом с точкой):
var app = require('koa')();
// JWT session middleware
var session = require("./session")();
app.use(session);
app.listen(3080);
Как вы это называете для каждого отдельного пользователя/запроса? – jfriend00
@ jfriend00 Фактическая реализация выполняется в промежуточном программном обеспечении KoaJS. Поэтому он использует view 'app.use (..)' из файла начальной загрузки – silkAdmin
Это не объясняет это вообще. Этот модуль называется отдельно для каждого нового запроса, поэтому для каждого запроса создается новый объект сеанса или есть только один объект Session, который используется всеми запросами. – jfriend00