【问题标题】:Passport JS deserialize errorPassport JS 反序列化错误
【发布时间】:2018-07-23 15:23:15
【问题描述】:

我在 MEAN 堆栈上创建了一个 REST API。我对 PassportJS 的反序列化功能有疑问。似乎它根本没有在我的节点应用程序的整个运行上下文中被调用。所有其他功能都运行良好。在过去的两天里,我一直在努力解决这个问题。 :( 我检查了 StackOverflow 上与 Passport Auth 相关的所有帖子,但没有任何帮助。以下是我的代码。我错过了什么?

const passport = require('passport');
const mongoose = require('mongoose');
const status = require('http-status');
const LocalStrategy = require('passport-local').Strategy;

module.exports = function(app) {
    var db = mongoose.createConnection('mongodb://localhost/someDbName');
    var User = db.model('User', new mongoose.Schema({id: {type: Number,required: true,index: true}}));

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

    passport.deserializeUser(function(id, done) {
        User.findOne({id: id }).exec(done);
    });

    passport.use(new LocalStrategy(function(username, password, done) {
        User.findOne({ 'id': username })
            .exec(function (err, user) {
                if (user && password === user.data.password) {
                    return done(null, user);
                }
                return done(null, false, {message: 'Incorrect Username or Password.'});
            });
    }));

    app.use(require('express-session')({ secret: 'some secret' }));
    app.use(passport.initialize());
    app.use(passport.session());  

    app.post('/api/v1/auth/user/login', function(req, res, next) {
        passport.authenticate('local', function(err, user, info) {
            if (err) {
                return next(err);
            }
            if (!user) {
                return res.
                    status(status.UNAUTHORIZED).send();
            }
            req.logIn(user, function(err) {
                if (err) {
                    return res.
                        status(status.INTERNAL_SERVER_ERROR).send();
                }
                return res.
                    status(status.OK).
                    send(req.user); // req.user is set here
            });
        })(req, res, next);
    });

    app.get('/api/v1/user/data', function(req, res){
        // req.user is always turning up to be undefined here
        // even though we have a session object in the req object.
        if (req.user) { 
            return res.
                status(status.ACCEPTED).
                send(req.user);
        }
        return res.status(status.UNAUTHORIZED).send();
    });
}

PS 我正在使用 Passport v0.4.0 |猫鼬 v4.0.3 |快递 v4.16.2。 |节点 v6.10.0

【问题讨论】:

    标签: node.js mongoose passport.js passport-local express-session


    【解决方案1】:

    您需要使用erruser 参数调用done

            passport.deserializeUser(function(id, done) {
              User.findById(id, function(err, user) {
               done(err, user);
              });
            });
    

    【讨论】:

    • 感谢您的回复。我说完了。它仍然是一样的。没有帮助:(
    猜你喜欢
    • 2018-03-30
    • 2019-08-14
    • 2021-06-05
    • 2019-03-16
    • 2017-11-05
    • 2018-06-03
    • 2014-02-19
    • 2012-01-01
    • 1970-01-01
    相关资源
    最近更新 更多