#node.js #mongodb #mongoose
Вопрос:
Я пытаюсь выполнить свою функцию входа в систему (я использую bcrypt и jsonwebtoken) проблема в том , что console.log (user._id) возвращает мне «новый объект (» 6148f043ebbaa0ab41ac8499 «)» вместо просто «6148f043ebbaa0ab41ac8499», что было бы проще для создания токена.
module.exports.login = async (req, res) => {
const { email, password } = req.body;
// Compare the req.body.password to the hashed password in DB
const user = await UserModel.findOne({ email: email });
const match = await bcrypt.compare(password, user.password);
if (match) {
try {
const user = await UserModel.findOne({ email: email });
console.log(user._id);
// Assign a token
const token = jwt.sign({ userId: user._id }, process.env.LOGIN_TOKEN, {
expiresIn: "1h",
});
console.log(token);
res.cookie("jwt", token, { httpOnly: true});
res.status(200).json({ user: user._id });
} catch (err) {
res.status(500).json(err);
}
} else {
res.status(500).json({ message: "error!!!" });
}
};
Как это исправить, пожалуйста?
Ответ №1:
Это нормальное поведение. Поскольку у вас есть an ObjectId
, вы можете преобразовать его в строку, вызвав соответствующий toHexString()
метод. Я также изменил код для проверки на наличие неопределенного пользователя и удалил дополнительный вызов для поиска пользователя, поскольку вы уже сделали это в предыдущей строке. Пожалуйста, ознакомьтесь с обновленным кодом:
module.exports.login = async (req, res) => {
const { email, password } = req.body;
const user = await UserModel.findOne({ email: email });
if (!user) {
return res.status(400).json({ message: "Unauthorised"});
}
// Compare the req.body.password to the hashed password in DB
const match = await bcrypt.compare(password, user.password);
if (match) {
try {
// Convert user id (ObjectId) to a string
const userId = user._id.toHexString();
// Now user id is a string
console.log(userId);
// Assign a token
const token = jwt.sign({ userId }, process.env.LOGIN_TOKEN, {
expiresIn: "1h",
});
console.log(token);
res.cookie("jwt", token, { httpOnly: true});
res.status(200).json({ user });
} catch (err) {
res.status(500).json(err);
}
} else {
res.status(400).json({ message: "Unauthorised" });
}
};
Комментарии:
1. Это работает, и я должен признаться, что ваш код намного красивее моего, лол. Большое спасибо !