【发布时间】:2019-04-28 10:37:23
【问题描述】:
我想在用户进行身份验证时更新用户的位置。
city 属性需要在用户 POST API 路由 /login 时更新。
我似乎无法弄清楚如何更新架构,因为我已经在堆栈上尝试了多种解决方案。有人可以帮帮我吗
POST 请求:包含 api 路由 /login
router.post('/login',cors(), async (req, res) => {
try {
const { email, password, city } = req.body;
if (!isEmail(email)) {
return res.status(400).json({
errors: [
{
title: 'Bad Request',
detail: 'Email must be a valid email address',
},
],
});
}
if (typeof password !== 'string') {
return res.status(400).json({
errors: [
{
title: 'Bad Request',
detail: 'Password must be a string',
},
],
});
}
const user = await User.findOne({ email });
if (!user) {
throw new Error();
}
const userId = user._id;
user.update({
city: req.user.city
},{
$set: {
"User.city": req.body.city
}
}, function (err, user) {
if (err) throw error
console.log(user)
console.log("update user complete")
});
const passwordValidated = await bcrypt.compare(password, user.password);
if (!passwordValidated) {
throw new Error();
}
const session = await initSession(userId);
res
.cookie('token', session.token, {
httpOnly: true,
sameSite: true,
maxAge: 1209600000,
secure: process.env.NODE_ENV === 'production',
})
.json({
title: 'Login Successful',
detail: 'Successfully validated user credentials',
csrfToken: session.csrfToken,
token: session.token,
city : user.city
});
} catch (err) {
res.status(401).json({
errors: [
{
title: 'Invalid Credentials',
detail: 'Check email and password combination',
errorMessage: err.message,
},
],
});
}
});
UserSchema:这是用户的猫鼬模式
const mongoose = require('mongoose');
const uniqueValidator = require('mongoose-unique-validator');
const bcrypt = require('bcryptjs');
const UserSchema = new mongoose.Schema({
email: {
type: String,
required: true,
minlength: 1,
trim: true,
unique: true, //each registered email must be unique
},
password: {
type: String,
required: true,
minlength: 8,
},
city:{
type: String,
},
module.exports = mongoose.model('User', UserSchema);
【问题讨论】:
标签: javascript mongodb mongoose mean-stack