MongoStore,Passport-local - 会话不存储在db中

时间:2016-04-25 17:00:40

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

我有一个Node.js Express应用程序,我正在尝试使用MongoStore来保存会话和Passport-local进行身份验证。该应用不会在db.sessions

中存储会话

app.js

var session = require("express-session");
var MongoStore = require("connect-mongo/es5")(session);
var passport = require('passport');

app.use(session({
    secret: 'secret',
    resave: false,
    saveUninitialized: false,
    duration: 30 * 60 * 1000,
    activeDuration: 5 * 60 * 1000,
    store: new MongoStore({
        url: MongoDB.MONGODB_URL
    })
})); 

app.use(passport.initialize());

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

passport.deserializeUser(function(id, done) {
    db.users.findById(id, function(err, user){
        if(!err) done(null, user);
        else done(err, null);
    });
});

localstrategy实现如下。 MongoDB是我自己的模块,它与MongoDB交互。

passport.use('local', new LocalStrategy({
        usernameField: 'email',
        passwordField: 'password'
},
    function (email, password, done) {
        process.nextTick(function () {
            MongoDB.collection("users").findOne({
                email: email
            }, function (error, doc) {
                if (error) {
                    return done(error);
                }
                if (doc) {
                    if (doc.password === PasswordManager.encryptPassword(password)) {
                        return done(null, doc);
                    } else {
                        return done("Invalid Password", false);
                    }
                }
            });
        });
    }
));

身份验证请求。 在我尝试使用MongoStore会话时,我已将选项 - {session: false}传递给req.LogIn函数。

router.post('/login', function (req, res, next) {
passport.authenticate('local', function (err, user) {
    if (err) {
        return next(err);
    }
    if (!user) {
        return res.status(401).send({
            success: false,
            error: "User not found!",
            data: null
        });
    }

        req.logIn(user, {session: false}, function (err) {
            if (err) {
                return next(err);
            }
            req.session.user = user;
            return res.send({
               success: true,
               error: null,
               data: user
           });
        })
    })(req, res, next);
});

0 个答案:

没有答案