Я пытаюсь создать аутентификацию при входе в систему, но в Postman я получаю ошибку 400, в которой говорится, что мой синтаксис неверен при тестировании.Я почти уверен, что вся моя модель User является надежной, но для хорошей меры я приложил все это на случай, если что-то не так.В противном случае, я действительно не уверен, в чем проблема или куда идти дальше.
Данные, которые я отправляю, вызывают 400 неверный запрос (запрос не может быть выполнен из-за неправильного синтаксиса) и записывают неверный пароль на консоль:
{
"email": "andrew@example.com",
"password": "Red12345!"
}
Вот весь мой код модели пользователя:
const mongoose = require('mongoose')
const validator = require('validator')
const bcrypt = require('bcryptjs')
const userSchema = new mongoose.Schema({
name: {
type: String,
required: true,
trim: true
},
email: {
type: String,
unique: true,
require: true,
trim: true,
lowercase: true,
validate(value) {
if(!validator.isEmail(value)) {
throw new Error('Email is invalid')
}
}
},
age: {
type: Number,
default: 0,
validate(value) {
if(value < 0) {
throw new Error('Age must be a positive number.')
}
}
},
password: {
type: String,
trim: true,
lowercase: true,
required: true,
minlength: 7,
validate(value) {
if(value.toLowerCase().includes("password")) {
throw new Error("Password can't be 'password'.")
}
}
}
})
userSchema.statics.findByCredentials = async (email, password) => {
const user = await User.findOne({ email })
if (!user) {
throw new Error('User not found')
}
const isMatch = await bcrypt.compare(password, user.password)
if (!isMatch) {
throw new Error('Invalid password')
}
return user
}
//Hash the plain text password before saving
userSchema.pre('save', async function (next) {
const user = this
if(user.isModified('password')) {
user.password = await bcrypt.hash(user.password, 8)
}
next()
})
const User = mongoose.model('User', userSchema)
module.exports = User
А вот маршрутизатор входа пользователя:
router.post('/users/login', async (req, res) => {
try {
const user = await User.findByCredentials(req.body.email, req.body.password)
res.send(user)
} catch (e) {
console.log(e.message)
res.status(400).send()
}
})