2013-04-17 7 views
18

を表現。私はmongostoreを使ってmongodbへのセッションを維持しています。永続的セッションと私は自分のアプリケーションに認証とセッションを処理するためにパスポートを使用してい

セットアップは、一般的には正常に動作します。しかし、サーバーを再起動すると、すべてのユーザーがログアウトされるので、明らかにセッションはmongodbに保存されるのではなく、メモリに保持されます。私は、サーバーを再起動するときにユーザーがまだログインしているセットアップを実現しようとしています。

私はベアボーンのgithubのレポを作成した(コードを実行するために必要なすべてのコードを含む)

ミドルウェア

app.use(express.cookieParser('your secret here')); 
    app.use(express.session()); 
    app.use(passport.initialize()); 
    app.use(passport.session({ 
     maxAge: new Date(Date.now() + 3600000), 
     store: new MongoStore(
      { 
       db: mongodb.Db(
        conf.mongodbName, 
        new mongodb.Server(
         'localhost', 
         27017, 
         { 
          auto_reconnect: true, 
          native_parser: true 
         } 
        ), 
        { 
         journal: true 
        } 
       ) 
      }, 
      function(error) { 
       if(error) { 
        return console.error('Failed connecting mongostore for storing session data. %s', error.stack); 
       } 
       return console.log('Connected mongostore for storing session data'); 
      } 
     ) 
    })); 

パスポート

passport.use(new LocalStrategy(
    { 
     usernameField: 'email', 
     passwordField: 'password' 
    }, 
    function(email, password, done) { 
     console.log('user %s attempting to authenticated', email); 
     return User.findOne({email:email}, function(error, user) { 
      if(error) { 
       console.error('Failed saving user %s. %s', user.id, error.stack); 
       return done(error); 
      } 
      if(!user) { 
       return done(null, false); 
      } 
      console.log('user %s logged in successfully', user.id); 
      return done(null, { //passed to callback of passport.serializeUser 
       id : user.id 
      }); 
     }); 
    } 
)); 

passport.serializeUser(function(user, done) { 
    return done(null, user.id); //this is the 'user' property saved in req.session.passport.user 
}); 

passport.deserializeUser(function (id, done) { 
    return User.findOne({ id: id }, function (error, user) { 
     return done(error, user); 
    }); 
}); 

githubのレポを次のように

基本的な構成がありますコードを含むhere

ちょうどあなたのMongoDBの資格情報、すなわちmongodbURLとmongodbNameとのルートディレクトリにconf.jsファイルを作成し、実行してNPMをインストールし、ノードが始めるためapp.js。それはあなたが設定する必要がsession()のExpressバージョン4.xのよう

おかげ

+0

は、MongoDBのウェブスケールを作るものです;-) http://www.youtube.com/watch?v=b2F-DItXtZsを参照してください。 – jarmod

答えて

28

passport.session()は、任意の構成を取ることはありません。 cookieのプロパティでなければなりません

また
app.use(session({ 
    cookie : { 
    maxAge: 3600000 // see below 
    }, 
    store : new MongoStore(...) 
}); 
... 
app.use(passport.session()); 

maxAge( )はDate引数をとらず、セッションが有効であることを示すミリ秒数だけです。特急ミドルウェアモジュールセッションの使用方法について

、あなたはhere詳細を調べることができます。実際にディスクにデータを書き込まない

関連する問題