2013-02-05 28 views
5

Tôi đang sử dụng nodejs (expressjs) được lưu trữ trên heroku.Làm thế nào để làm sạch tất cả các phiên trong Nodejs (heroku + redis)?

Sessions được lưu trữ trong redis (Redistogo plugin cho Heroku):

RedisStore = require('connect-redis')(express) 
app.use express.session 
     secret: process.env.CLIENT_SECRET 
     cookie: { maxAge: 604800000 } 
     store: new RedisStore {client: redis} 

Sau khi người dùng đăng nhập tôi lưu trữ thông tin của mình trong req.session

after_user_logged_id = (req, user)->  
    req.session.current_user = 
    id: user._id 
    name: user.name 

tôi cần phải khởi động lại máy chủ và sạch sẽ tất cả phiên: đăng xuất tất cả người dùng để buộc họ đăng nhập một lần nữa. Làm thế nào tôi nên làm điều này? Khởi động lại plugin Redis không giúp ích gì.

+1

Bạn có thể tự mình thực hiện, bằng mã. Có thể là một tính năng tốt để có, nếu bạn cần phải nâng cấp/thay đổi một cái gì đó trong phiên trong tương lai. Những gì tôi đề nghị là bạn kiểm tra sự tồn tại của một số tài sản, và nếu không phá hủy phiên, buộc người dùng phải đăng nhập, tại thời điểm bạn thiết lập thuộc tính. Một cái gì đó như: 'if (session.version <1) {session.destroy()}'. –

+0

tôi nên đặt nó trong app.configure() -> app.use (req, res, next) -> session_logic? –

+1

Có, bạn có thể đặt nó ở đó, và bạn có thể cũng muốn 'res.redirect()' vào trang đăng nhập của bạn. –

Trả lời

6

redis.flushdb() có thể là một chút cực đoan nếu bạn kết thúc việc lưu trữ cái gì khác trong redis. Bạn chỉ cần xóa tất cả các phím "sess: *". Thật không may, không có del *, vì vậy bạn có thể sử dụng một cái gì đó như thế này:

redis.keys("sess:*", function(err, key) { 
    redis.del(key, function(err) { 
    }); 
}); 
0

Mã để làm sạch tất cả các phiên redis:

RedisStore = require('connect-redis')(express) 
rtg = require('url').parse process.env.REDISTOGO_URL 
redis = require('redis').createClient rtg.port, rtg.hostname 
redis.auth rtg.auth.split(':')[1] # auth 1st part is username and 2nd is password separated by ":" 
    try 
    console.log "clean sessions" 
    redis.flushdb() 
    catch err 
    console.log "error:", err 
Các vấn đề liên quan