2012-10-18 15 views
12

Tôi đã đọc chủ đề này Node.js + express.js + passport.js : stay authenticated between server restart và tôi cần chính xác những điều tương tự, nhưng đối với Redis. Tôi đã sử dụng mã như vậy:Nodejs + Passport.js + Redis: làm thế nào để lưu trữ các phiên trong Redis

var RedisStore = require('connect-redis')(express); 
app.use(express.session({ 
    secret: "my secret", 
    store: new RedisStore, 
     cookie: { secure: true, maxAge:86400000 } 
})); 

Và nó không hoạt động. Để kết nối Redis, tôi sử dụng mô-đun kết nối-redis. Tôi đang làm gì sai? Cảm ơn!

UPD: Tôi không gặp bất kỳ lỗi nào. Để đảm bảo quá trình xác thực thành công, tôi đã thêm dòng nhật ký và thực thi.

function(email, password, done) { 
    // asynchronous verification, for effect... 
    process.nextTick(function() { 
     findByEmail(email, function(err, user) { 
      if (!user) { 
       return done(null, false, { 
        message: 'Unknown user ' + email 
       }); 
      } 
      if (user.password != password) { 
       return done(null, false, { 
        message: 'Invalid password' 
       }); 
      } 
      //just logging that eveything seems fine 
      console.log("STATUS: User " + email + " authentificated succesfully"); 
      return done(null, user); 
     }) 
    }); 
})); 

Đăng nhập với express.logger() được kích hoạt là:

127.0.0.1 - - [Fri, 19 Oct 2012 05:49:09 GMT] "GET /ico/favicon.ico HTTP/1.1" 404 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4" 
STATUS: User admin authentificated succesfully 

tôi làm giả sử rằng không có gì sai với auth/người dùng/chứng chỉ/serializing/deserializing chính nó là. Vấn đề là hộ chiếu không thể đặt cookie thành Redis và đọc nó.

+0

Điều gì không hiệu quả? lỗi gì bạn nhận được? – Max

+0

Tôi đã cập nhật bài đăng của mình. – f1nn

+0

"hộ chiếu không thể thiết lập cookie cho Redis và đọc nó." Điều đó không có ý nghĩa. – Ben

Trả lời

5

tôi nên sử dụng

cookie: { secure: false, maxAge:86400000 } 
+2

Thiết 'đảm bảo: false' nghĩa là cookie phiên của bạn có thể được gửi mà không SSL, để lại cho bạn dễ bị phiên cướp. http://en.wikipedia.org/wiki/Session_hijacking – Alan

+2

Không phải là một ý tưởng tốt để sử dụng cookie thay vì phiên. –

+0

Bạn có thể làm điều này cho phát triển nhưng chắc chắn rằng bạn thiết lập an toàn là true trong sản xuất. Bạn có thể làm điều đó bằng cách sử dụng một biến môi trường khá dễ dàng. – Porlune

0

gì xảy ra khi bạn thiết lập các cửa hàng một cách rõ ràng? tức là điều gì đó dọc theo các dòng này trong ứng dụng của bạn:

var redis = require('redis'); 
// This is host and port-dependent, obviously 
var redisClient= redis.createClient(6379, 'localhost'); 

app.use(express.session({ 
    secret: 'your secret', 
    /* set up your cookie how you want */ 
    cookie: { maxAge: ... }, 
    store: new (require('express-sessions'))({ 
     storage: 'redis', 
     instance: redisClient 
    }) 
}));