在 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)
}
我是 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)
}