#node.js #express #authentication #mongoose
#node.js #экспресс #аутентификация #mongoose
Вопрос:
Я работаю над серверной частью аутентификации пользователя с помощью express amp; mongoose.
Я пытаюсь разобраться в возможности пользователей обновлять свое имя и адрес электронной почты.
Итак, я проверяю, совпадает ли электронное письмо с электронной почтой текущего пользователя, а затем, если нет, проверяю, соответствует ли оно электронной почте любого другого пользователя. Если это произойдет, я выдам ошибку, если нет, я сохраняю ее для пользователя.
Имя обновляется нормально, а электронная почта обновляется нормально (за исключением случаев, когда пользователь уже был вызван).
Сообщение об ошибке отправляется клиенту, но также приводит к сбою сервера с помощью «ERR_HTTP_HEADERS_SENT», и я ни за что на свете не могу понять, почему, поскольку я возвращаю ошибку.
Вот код:
exports.update = (req, res) => {
// Get New User Details
const { firstName, lastName, email } = req.body;
// Find User
User.findById(req.user._id, (err, user) => {
if (err || !user) {
return res.status(400).json({
error: 'User not found.'
});
}
user.firstName = firstName;
user.lastName = lastName;
// Check to see if another user has this email.
if (email !== user.email) {
User.findOne({ email: email }).exec((err, existingUser) => {
// If they do, send an error message.
if (!err amp;amp; existingUser) {
return res.status(400).json({
error: "This email address is already in use.",
});
}
// If they don't, send alert email to old email address.
});
// Finally update email address.
user.email = email;
}
// Save Updated User Information
user.save((err, updatedUser) => {
if (err) {
console.log("Error: Could not update user.");
return res.status(400).json({
error: 'User update failed.'
});
}
updatedUser.hashedPassword = undefined;
updatedUser.salt = undefined;
return res.json({
message: ' Account updated successfully.',
data: updatedUser
});
});
});
};
Ответ №1:
Удалось решить:
// Update User Account Data
// ========================
exports.update = (req, res) => {
// Get New User Details
const { firstName, lastName, email } = req.body;
// Find User
User.findById(req.user._id, (err, user) => {
if (err || !user) {
return res.status(400).json({
error: 'User not found.'
});
}
if (email !== user.email) {
User.findOne({ email: email }).exec((err, existingUser) => {
// If they do, send an error message.
if (!err amp;amp; existingUser) {
return res.status(400).json({
error: "This email address is already in use.",
});
}
// If they don't, send alert email to old email address.
// Finally update user.
user.firstName = firstName;
user.lastName = lastName;
user.email = email;
// Save Updated User Information
user.save((err, updatedUser) => {
if (err) {
console.log("Error: Could not update user.");
return res.status(400).json({
error: 'User update failed.'
});
}
updatedUser.hashedPassword = undefined;
updatedUser.salt = undefined;
return res.json({
message: ' Account updated successfully.',
data: updatedUser
});
});
});
} else {
user.firstName = firstName;
user.lastName = lastName;
// Save Updated User Information
user.save((err, updatedUser) => {
if (err) {
console.log("Error: Could not update user.");
return res.status(400).json({
error: 'User update failed.'
});
}
updatedUser.hashedPassword = undefined;
updatedUser.salt = undefined;
return res.json({
message: ' Account updated successfully.',
data: updatedUser
});
});
}
});
};