2014-01-13 35 views
9

我正在用nodejs使用护照,我遇到了一个奇怪的问题, passport.deserializeUser(function..永远不会被调用。什么可能导致deserializeUser()不被调用?

奇怪的是,serializeUser(function..获取的所谓就好了..

然而奇怪的是,它是前几天的工作就好了,but now it isn't.我想不出任何东西,我在我的系统改变了会造成这种情况。

var express = require('express'); 
var app = express(); 

var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 

app.configure(function(){ 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    app.use(express.static('public')); 
    app.use(express.cookieParser()); 
    app.use(express.bodyParser()); 
    app.use(express.session({ secret: 'keyboard cat' })); 
    app.use(app.router); 
}); 

passport.use(new LocalStrategy(function(username, password, done){ 
    return done(null, 'Always Authenticated User'); 
})); 

passport.serializeUser(function(user, done) { 
    console.log(' serialize OK! '); 
    done(null, user); 
}); 
passport.deserializeUser(function(id, done) { 
    console.log('deserialize Never gets called'); 
    done(null,id); 
}); 

app.post('/login' 
    ,passport.authenticate('local' 
     ,{ successRedirect: '/success' 
     ,failureRedirect: '/failure' 
     ,failureFlash: false 
} ) ); 

app.get('/', function(req, res){ 
    // very simple form 
    res.send("<form id='LoginLocal' action='/login' method='post'><fieldset><legend>Login with username/password</legend><label for='username'> Username: <input type='text' name='username' placeholder='username'><label for='password'> Password: <input type='password' name='password' placeholder='password'><input type='submit' value='Login'></fieldset></form>"); 
}); 

app.listen(80); 

回答

4

由于快递4.x版相同的答案仍然应用于的护照(...)必须调用后才能express.session像这样:

app.use(express.session({ secret: 'keyboard cat' })); 
app.use(passport.initialize()); 
app.use(passport.session()); 

您不再里面给他们打电话app.configure(),因为它已被快递v4.x弃用

8

移动后app.use(passport.…app.use(express.…解决它。

app.configure(function(){ 
    app.use(express.static('public')); 
    app.use(express.cookieParser()); 
    app.use(express.bodyParser()); 
    app.use(express.session({ secret: 'keyboard cat' })); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    app.use(app.router); 
}); 
相关问题