Идентификатор пользователя возвращается как «неопределенный» при попытке войти в систему пользователя - PullRequest
0 голосов
/ 12 июня 2018

В настоящее время я использую Node.js вместе с Mongoose, Express-Session и Passport.Это все для разработки стороны аутентификации моего проекта.

Сегодня я столкнулся с проблемой: при попытке войти в систему пользователь не идентифицирует свой идентификатор.Вот фрагмент кода, который, я думаю, связан с этой проблемой:

var User = require("./user-model"); //user model located in another file
var passport = require("passport");
var session = require("express-session");

app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: false
}));

app.use(passport.initialize());
app.use(passport.session());

app.post("/register", (req, res) => {
    var user = new User(req.body);
    user.save()
        .then(item => {
            User.findOne().sort({_id: 1}).exec(function(err, results, fields) {
                if(err) throw err;

                const user_id = results[0]; //Here, the console logs "undefined"

                console.log(results[0]);
                req.login(user_id, function(err) {
                    console.log("User saved to database");
                    res.redirect('/');
                });
            });

        })
        .catch(err => {
            console.log(400).send("Unable to save to database");
        });
});

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

passport.deserializeUser(function(user_id, done) {
    done(null, user_id);
});

Если вам понадобится какой-либо дополнительный фрагмент кода, я с удовольствием обновлю его для вас.

Спасибо зазаранее!

1 Ответ

0 голосов
/ 12 июня 2018

findOne находит один результат, отсюда и имя.

Таким образом, results параметр на самом деле user, и он, вероятно, должен быть:

User.findOne().sort({_id: 1}).exec(function(err, user) {
    if(err) throw err;

    const user_id = user._id;
    ...       

Обратите внимание, что user может быть null, если их нет.

...