Si un usuario ya está registrado en e intenta entrar de nuevo en una nueva instancia me gustaría que salga la otra instancia de usuario. No quiero que el mismo usuario se registre en dos veces en mi aplicación.

Actualmente la sesión se almacena en un almacén Redis, estoy usando express /conectarse a manejar el almacenamiento de sesiones. Una de las funciones disponibles que podrían ser utilizados para destruir la sesión es la siguiente:

.destroy(sid, callback)

Sin embargo necesito saber que id de sesión antes de que me llame .destroy(). En Redis el nombre de usuario se almacena como parte de la sesión.

Pregunta: ¿Es posible la consulta de Redis para obtener el identificador de sesión basado en el nombre de usuario?

InformationsquelleAutor Jack | 2012-02-15

4 Comentarios

  1. 73

    req.sessionID le proporcionará la sesión del ID, donde req es un objeto de solicitud.

    • Por qué esto no es aceptado respuesta? Funciona muy bien para mí. Gracias!
    • Esto no está funcionando para mí. req.sessionID es undefined. NodeJS 9.x, express 4, express-sesión de 1.15.
  2. 20

    Para los lectores;

    Conectar middlewares no están incluidos en el Express desde la versión 4.

    Así que para tener req.sessionID, usted debe hacer lo siguiente:

    1. Asegúrese de que usted tiene cookie-parser abd express-session los módulos dentro de su paquete.json. Si no se agrega, agregarlos:
    npm install express-session --save
    npm install cookie-parser --save
    1. Tener cuidado con el orden, mientras que requieran en su app.js archivo y agregar parámetros de configuración necesaria.
    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
    }));
    1. Ahora usted debe estar utilizando req.sessionID y req.período de sesiones.id.
    • cookie-parser ya no se utiliza para expresar la sesión de la espalda en la 1.5.0 (ver readme en github.com/expressjs/session). De hecho, cookie-analizador de ahora puede provocar efectos secundarios.
  3. 16

    Almacenar el SID de la cuenta, cuando el usuario inicia durante la validación de base de datos de la cuenta de usuario llamada .destruir(sid, fn), a continuación, actualizar el SID de la base de datos con la actual SID del usuario.

    En mi caso usando MongoDB esta es la forma en que lo he hecho:

    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}});
           ...
        }
        ...
      }
    }
  4. 0

    Pregunta: ¿Es posible la consulta de Redis para obtener el identificador de sesión basado en el nombre de usuario?

    No. Las claves de sesión en redis no se nombran después del nombre de usuario.

    He aquí un pensamiento, a pesar de que: Cuando una ya ha iniciado sesión en el usuario intenta entrar de nuevo, no puedes ver que, en su aplicación, y para destruir la sesión anterior inmediatamente, o que no les permiten acceder de nuevo?

Dejar respuesta

Please enter your comment!
Please enter your name here