Si un utilisateur est déjà connecté et tente de se reconnecter dans une nouvelle instance, il convient de déconnecter l'autre instance d'utilisateur. Je ne veux pas que le même utilisateur soit connecté deux fois sur mon application.
Actuellement, la session est stockée dans un magasin Redis, j'utilise express/connect pour gérer le stockage de session. Une des fonctions disponibles pouvant être utilisées pour détruire la session est la suivante:
.destroy(sid, callback)
Cependant, je dois trouver cet identifiant de session avant d'appeler .destroy (). Dans Redis, le nom d'utilisateur est stocké dans le cadre de la session.
Question: Est-il possible d'interroger Redis pour obtenir l'identifiant de session basé sur le nom d'utilisateur?
req.sessionID
vous fournira l'ID de la session, où req est un objet de requête.
Pour les lecteurs récents
Les middlewares Connect ne sont plus inclus dans Express depuis la version 4.
Donc, pour que req.sessionID
fonctionne, vous devez effectuer les tâches suivantes:
cookie-parser
abd express-session
dans votre package.json. Si ce n'est pas ajouté, ajoutez-les:npm install express-session --save npm install cookie-parser --save
app.js
et ajoutez les paramètres de configuration requis.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
et req.session.id
.Stockez le SID avec le compte lorsque l'utilisateur se connecte pendant la validation de la base de données de l'appel du compte utilisateur .destroy (sid, fn), puis mettez à jour le SID dans la base de données avec le SID actuel de l'utilisateur.
Dans mon cas, en utilisant MongoDB, voici comment je l’ai fait:
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}});
...
}
...
}
}
Question: Est-il possible d'interroger Redis pour obtenir l'identifiant de session basé sur le nom d'utilisateur?
Non. Les clés de session dans Redis ne portent pas le nom d'utilisateur.
Cependant, voici une pensée: lorsqu'un utilisateur déjà connecté tente de se connecter à nouveau, ne pouvez-vous pas voir cela dans votre application et détruire immédiatement l'ancienne session ou ne pas leur permettre de se connecter à nouveau?