什么可能导致deserializeUser()不被调用?

lag*_*lex 10 passport.js

我正在使用带有nodejs的护照,我遇到了一个奇怪的问题,passport.deserializeUser(function..永远不会被调用.

奇怪的是,serializeUser(function..被称为好的..

但更奇怪的是,它在几天前工作得很好,但现在却没有.我想不出我在系统中改变了会引起这种情况的任何事情.

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);
Run Code Online (Sandbox Code Playgroud)

lag*_*lex 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);
});
Run Code Online (Sandbox Code Playgroud)


小智 6

从 express v4.x 开始,同样的答案仍然适用于 Passport.(...) 只能在 express.session 之后调用,如下所示:

app.use(express.session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
Run Code Online (Sandbox Code Playgroud)

您不再在内部调用它们,app.configure()因为它自 express v4.x 起已被弃用