Пустой объект приходит для входа в систему. Использование регистрации, выполненное по подобию логина, и поэтому все работает. Отправляя запрос через Postman, вы можете зарегистрировать пользователя и проверить, существует ли такой файл в базе данных. Когда вы отправляете запрос для входа, вместо токена, сообщение приходит из последнего блока "else" "Пользователь с таким адресом электронной почты не найден".
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const User = require('../models/User');
const keys = require('../config/keys');
module.exports.login = async function (req, res) {
console.log('req.body', req.body); //Empty object {}
const candidate = await User.findOne({
email: req.body.email
});
if (candidate) {
const passwordResult = bcrypt.compareSync(req.body.password,
candidate.password);
if (passwordResult) {
const token = jwt.sign({
email: candidate.email,
userId: candidate._id
}, keys.jwt, {expiresIn: 60 * 60});
res.status(200).json({
token: 'Bearer ${token}'
})
} else {
res.status(401).json({
message: 'Passwords do not match'
})
}
} else {
console.log(req.body.email);
console.log(candidate);
res.status(404).json({
message: 'User with such email address not found'
})
}
};
module.exports.register = async function (req, res) {
console.log('req.body', req.body);
const candidate = await User.findOne({
email: req.body.email
});
if (candidate) {
res.status(409).json({
message: "User with this email address already exists"
})
} else {
const salt = bcrypt.genSaltSync(10);
const password = req.body.password;
const user = new User({
email: req.body.email,
password: bcrypt.hashSync(password, salt)
});
try {
await user.save();
res.status(201).json(user)
} catch (e) {
}
}
};
! [Регистрация работает правильно] (https://imgur.com/a/9T5vRMD)
! [Вход не работает правильно] (https://imgur.com/a/rQOiw2w) "Должен быть токеном, потому что этот пользователь уже существует"
Я сам нашел ответ. Я использую "x-form-urlencoded", логин работает правильно, и я получаю действительный токен. По-видимому, проблема заключается в внутренней реализации Почтальона, поскольку данные, введенные с помощью "rav", также должны быть действительными.