【问题标题】:What could be causing deserializeUser() to not get called?什么可能导致 deserializeUser() 没有被调用?
【发布时间】:2016-01-13 17:40:35
【问题描述】:

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

奇怪的是serializeUser(function.. get 的调用就好了..

然而奇怪的是,它在几天前运行良好,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);

【问题讨论】:

    标签: passport.js


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 谢谢先生。你救了我的一天! :))))))))))))))))))
      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 2011-08-26
      • 1970-01-01
      相关资源
      最近更新 更多