получить доступ к user._id в nodejs - PullRequest
0 голосов
/ 10 сентября 2018

Я довольно новичок в node.js и пытаюсь реализовать простую форму регистрации пользователей и форму входа, используя Node.js, Express, bcrypt, express-session и mongoose.

Всякий раз, когда пользователь входит в систему, я хочу установить значение req.session.userID для идентификатора пользователя. Когда я отслеживаю код, я не могу найти проблему. Я проследовал учебник в по этой ссылке , и все кажется похожим.

Схема:

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, он возвращает неопределенное значение! В чем проблема?

1 Ответ

0 голосов
/ 10 сентября 2018

Проблема в том, что обратный вызов возвращает 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)
                }
...