2012-12-23 3 views
30

J'essaie d'intégrer des sessions Redis dans mon système d'authentification écrit dans Node.js.Comment enregistrer et récupérer une session à partir de Redis

J'ai réussi à configurer le serveur Redis, connect-redis et le serveur Express.

Voici ma configuration (juste le peu important):

var express = require("express"); 
var RedisStore = require("connect-redis")(express); 
var redis = require("redis").createClient(); 

app.use(express.cookieParser()); 
app.use(express.session({ 
    secret: "thisismysecretkey", 
    store: new RedisStore({ host: 'localhost', port: 6379, client: redis }) 
})); 

maintenant ... Comment puis-je créer en fait, lu et détruis la session? J'ai lu des tonnes d'articles sur comment configurer connect-redis et beaucoup de questions ici sur SO, mais je jure chacun s'arrête sur juste la configuration et n'explique pas comment l'employer réellement ...

Je suis conscient que c'est probablement extrêmement simple, mais s'il vous plaît ne pas downvote et juste expliquer :).

Répondre

19

Cela devrait être tout ce qu'il ya à faire. Vous accédez à la session dans vos gestionnaires d'itinéraire via req.session. Les sessions sont créées, enregistrées et détruites automatiquement. Si vous devez créer manuellement une nouvelle session pour un utilisateur, appelez req.session.regenerate().

Si vous devez l'enregistrer manuellement, vous pouvez appeler le req.session.save(). Si vous devez le détruire manuellement, vous pouvez appeler le req.session.destroy().

Voir the Connect documentation pour la liste complète des méthodes et propriétés.

4

Considérez ce code.

var express = require('express'); 
var redis = require("redis"); 
var session = require('express-session'); 
var redisStore = require('connect-redis')(session); 
var bodyParser = require('body-parser'); 
var client = redis.createClient(); 
var app = express(); 

app.set('views', __dirname + '/views'); 
app.engine('html', require('ejs').renderFile); 

app.use(session({ 
    secret: 'ssshhhhh', 
    // create new redis store. 
    store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl : 260}), 
    saveUninitialized: false, 
    resave: false 
})); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: true})); 

app.get('/',function(req,res){ 
    // create new session object. 
    if(req.session.key) { 
     // if email key is sent redirect. 
     res.redirect('/admin'); 
    } else { 
     // else go to home page. 
     res.render('index.html'); 
    } 
}); 

app.post('/login',function(req,res){ 
    // when user login set the key to redis. 
    req.session.key=req.body.email; 
    res.end('done'); 
}); 

app.get('/logout',function(req,res){ 
    req.session.destroy(function(err){ 
     if(err){ 
      console.log(err); 
     } else { 
      res.redirect('/'); 
     } 
    }); 
}); 

app.listen(3000,function(){ 
    console.log("App Started on PORT 3000"); 
}); 

Vous devez installer connexion-Redis et passez votre express session exemple à elle. Puis, dans le middleware, initialisez redisStore avec les détails du serveur comme ceci:

Je mets ttl à 260, vous pouvez augmenter. Une fois TTL atteint ses limites, il supprime automatiquement la clé redis.

Dans les routeurs, vous pouvez utiliser la variable req.session pour SET, EDIT ou DESTROY la session.

une chose ...

Si vous voulez cookies personnalisé i.e. pas même que dans votre magasin Redis vous pouvez utiliser cookie analyseur pour définir les secrets de cookie.

Espérons que ça aide.

lien: https://codeforgeek.com/2015/07/using-redis-to-handle-session-in-node-js/

Questions connexes