2012-10-18 15 views
12

私はこのトピックNode.js + express.js + passport.js : stay authenticated between server restartを読んできましたが、私はまったく同じことが必要ですが、Redisには必要です。私はそのようなコードを使用しました:Nodejs + Passport.js + Redis:セッションをRedisに保存する方法

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

そして、それは動作しません。 Redisに接続するには、私はconnect-redisモジュールを使用します。私は間違っているの?ありがとう!

UPD:エラーはありません。認証プロセスを確実に行うために、ログラインを追加して実行します。

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); 
     }) 
    }); 
})); 

express.loggerとログ()した有効:

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 

私はを行う認証/ユーザー/資格情報/自分自身をデシリアライズ/シリアライズと間違って何も存在しないこととします。問題はちょうどパスポートは、レディスにクッキーを設定することはできませんし、それを読む。

+0

どうしたらうまくいかないのですか?あなたはどんなエラーを出していますか? – Max

+0

私の投稿を更新しました。 – f1nn

+0

"パスポートはCookieをRedisに設定できません。それは意味をなさない。 – Ben

答えて

5

私が使用する必要があります

明示的にストアを設定するとどうなり
cookie: { secure: false, maxAge:86400000 } 
+2

'secure:false'を設定すると、セッションCookieをSSLなしで送信できるため、セッションハイジャックに脆弱になります。 http://en.wikipedia.org/wiki/Session_hijacking – Alan

+2

セッションの代わりにクッキーを使用することをお勧めします。 –

+0

開発のためにこれを行うことはできますが、本番環境ではセキュリティをtrueに設定してください。あなたは環境変数を使ってそれをかなり簡単に行うことができます。 – Porlune

0

?つまり、あなたのアプリの次の行に沿ったものです:

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 
    }) 
})); 
関連する問題