在 nodejs 中访问 user._id

access the user._id in nodejs

我是 node.js 的新手,我正在尝试使用 Node.js、Express、bcrypt、express-session 和 mongoose 实现简单的用户注册和登录表单。

每当用户登录时,我想将 req.session.userID 的值设置为用户的 id。当我跟踪代码时,我找不到问题所在。我跟进了 this link 中的教程,一切似乎都很相似。

架构:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var bcrypt = require('bcrypt');

var userSchema = new Schema({
    teamName: {
        type: String,
        unique: true,
        trim: true,
        required: true
    },
    faculty: {
        type: String,
        required: true
    },
    email: {
        required: true,
        unique: true,
        trim: true,
        type: String
    },
    password: {
        required: true,
        type: String
    },
    score: {
        type: Number,
        default: 0
    }
});

userSchema.pre('save', function(next) {
    var user = this;
    bcrypt.hash(user.password, 10, function(err, hash) {
        if (err) return next(err)
        user.password = hash;
        next();
    });
});

userSchema.statics.authenticate = (email, password, callback) => {
    userModel.findOne({email: email}, (err, user) => {
        if (err) return callback(err);
        else if (!user) {
            console.log('User not found!')
        }
        else {
            bcrypt.compare(password, user.password, (err, result) => {
                if (result) {
                    callback(null, true)
                }
                else {
                    return callback()
                }
            })
        }
    })
}

var userModel = mongoose.model('User', userSchema);
module.exports = userModel;

服务器:

var userModel = require('./../models/users');
router.post('/login', (req, res) => {
    var email = req.body.email;
    var password = req.body.password;
    userModel.authenticate(email, password, (err, user) => {
        console.log(user)
        if (err) {
            console.log(err)
        }
        else if (!user) {
            console.log('Wrong Password')
        }
        else {
            req.session.userId = user._id;
            console.log(req.session.userId);

        }
    })
});

我在哪里记录了 req.session.userId 它的值 returns 未定义!问题出在哪里?

问题是回调正在返回 TRUE。回调应该返回 user 数据。 回调(空,用户)

bcrypt.compare(password, user.password, (err, result) => {
                if (result) {
                    callback(null, true)
                }

应该是

bcrypt.compare(password, user.password, (err, result) => {
                if (result) {
                    callback(null, user)
                }