2013-02-05 26 views
5

私はherokuでホストされているnodejs(expressjs)を使用しています。Nodejs(heroku + redis)のすべてのセッションを消去するには?

セッションはRedisの中で(HerokuのためRedistogoプラグイン)に格納されています。私にはログインしているユーザーがreq.session

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

で彼の情報を格納し

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

後、私はすべてのサーバーとクリーンを再起動する必要がありますセッション:すべてのユーザーをログアウトしてもう一度ログインさせる。私はこれをどのようにするべきですか? redisプラグインを再起動しても問題ありません。

+1

あなた自身で、コードで実装できます。将来セッションで何かをアップグレード/変更する必要がある場合は、持っているとよいでしょう。私が提案しているのは、いくつかのプロパティの存在をチェックし、それ以外の場合はセッションを破棄して、ユーザーにログインさせ、その時点でプロパティを設定することです。何かのように: 'if(session.version <1){session.destroy()}'。 –

+0

私はそれをapp.configure() - > app.use(req、res、next) - > session_logicに入れてください。 –

+1

はい、そこに置くことができますし、おそらくあなたのログインページに 'res.redirect()'したいでしょう。 –

答えて

6

redis.flushdbを()あなたはRedisの中に何かを格納してしまう場合は少し極端かもしれません。すべての "sess:*"キーを削除するだけです。残念ながら、del *はないので、次のようなものを使用することができます:

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

コードは、すべての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 
関連する問題