Ответ 1
req.sessionID
предоставит вам идентификатор сеанса, где req - это объект запроса.
Если пользователь уже вошел в систему и снова пытается войти в новый экземпляр, я бы хотел, чтобы он выходил из другого экземпляра пользователя. Я не хочу, чтобы один и тот же пользователь дважды регистрировался в моем приложении.
В настоящее время сеанс хранится в хранилище Redis, я использую express/connect для обработки хранилища сеансов. Одна из доступных функций, которая может быть использована для уничтожения сеанса, следующая:
.destroy(sid, callback)
Однако мне нужно найти этот идентификатор сеанса, прежде чем я вызову .destroy(). В Redis имя пользователя хранится как часть сеанса.
Вопрос: Возможно ли запросить Redis для получения идентификатора сеанса на основе имени пользователя?
req.sessionID
предоставит вам идентификатор сеанса, где req - это объект запроса.
Для недавних читателей;
Подключить middlewares не входят в Express с версии 4.
Итак, чтобы иметь req.sessionID
работу, вы должны выполнить следующее:
cookie-parser
abd express-session
модули внутри вашего пакета .json. Если он не добавлен, добавьте их:npm install express-session --save npm install cookie-parser --save
app.js
и добавляйте необходимые параметры конфигурации.var cookieParser = require('cookie-parser'); var session = require('express-session') app.use(cookieParser()); app.use(session({ secret: '34SDgsdgspxxxxxxxdfsG', // just a long random string resave: false, saveUninitialized: true }));
req.sessionID
и req.session.id
.Храните SID с учетной записью, когда пользователь входит в систему во время проверки базы данных учетной записи пользователя .destroy(sid, fn), а затем обновляет SID в базе данных с текущим SID пользователя.
В моем случае, используя MongoDB, вот как я это сделал:
app.post('/login', function(req, res)
{
var sid = req.sessionID;
var username = req.body.user;
var password = req.body.pass;
users.findOne({username : username, password : password}, function(err, result)
{
...
sessionStore.destroy(result.session, function(){
...
users.update({_id: result._id}, {$set:{"session" : sid}});
...
}
...
}
}
Вопрос: Можно ли запросить Redis для получения идентификатора сеанса на основе имени пользователя?
Нет. Клавиши сеанса в redis не называются после имени пользователя.
Вот мысль: если уже зарегистрированный пользователь пытается снова войти в систему, вы не можете увидеть это в своем приложении и либо немедленно уничтожить старый сеанс, либо не разрешить им снова войти?