1

mongodb とのセッションを正常に機能させるのに問題があります。問題なくユーザーを作成する次のコードをセットアップしました。

sessions次のように、データベースにデータが入力されていることも確認できます。

http://wes.io/LNbg/content

問題は、ログイン状態にならないことです。メモリを使用してセッションを保存するだけでは問題なく動作しますが、mongodb に移動すると動作しません。ここに問題のコードがあると思いますが、ここでアプリ全体を見ることができます: http://wes.io/LNVg

passport.use(new LocalStrategy(
  function(username, password, done) {
    console.log('Trying to log in as '.green, username);

    User.findOne({ name: username }, function(err, user) {
      if (err) {return done(err); }

      if(user) {
        console.log('Found user with the username of'.green,user); 
        done(null, user);
      } 

      else {
        console.log('No user found...  '.red.inverse, username, password);
        var user = new User();
        user.name = username;
        user.username = username;
        user.password = password;
        user.save(function(err){
          if(err) { throw err; }
          console.log('User created and saved'.green, user)
          done(null, user);
        })
      };

    });
  }
));

passport.serializeUser(function(user, done) {
  done(null, user);
});

passport.deserializeUser(function(user, done) {
  done(null, user);
});

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.cookieParser());
  app.use(express.static(path.join(__dirname, 'public')));
  app.use(require('less-middleware')({ src: __dirname + '/public' }));
  app.use(express.favicon());
  app.use(express.bodyParser());
  app.use(express.logger('dev'));
  app.use(express.methodOverride());
  app.use(express.session({ 
        store: store
      , secret: 'applecake'
      , cookie : {
            maxAge : 604800 // one week
        }
  }));
  app.use(passport.initialize());
  app.use(passport.session()); 
  app.use(app.router);
});

編集:セッションストアのコードは次のとおりです。

var express = require('express')
  , colors = require('colors')
  , routes = require('./routes')
  , mongoose = require('mongoose')
  , SessionStore = require("session-mongoose")(express)
  , store = new SessionStore({
        url: "mongodb://localhost/fb-session",
        interval: 120000 // expiration check worker run interval in millisec (default: 60000)
    })
  , Schema = mongoose.Schema
  , flash = require('connect-flash')
  , userz = require('./routes/user')
  , http = require('http')
  , path = require('path')
  , passport = require('passport')
  , LocalStrategy = require('passport-local').Strategy;
4

1 に答える 1

0

serialize および deserialze メソッドの問題であることがわかりました。ユーザーIDに変更されますが、名前の例を次に示します

passport.serializeUser(function(user, done) {
    done(null, user.name);
});
passport.deserializeUser(function(name, done) {
    done(null, { name: name });
});
于 2012-12-14T22:04:45.640 に答える