#javascript #node.js #mongodb #express #authentication
#javascript #node.js #mongodb #экспресс #аутентификация
Вопрос:
Я пытаюсь создать систему аутентификации пользователя и застрял при проверке пользователя, главным образом потому, что я не понимаю, как я могу просмотреть ВСЕХ СВОИХ ПОЛЬЗОВАТЕЛЕЙ, чтобы отфильтровать (.find) имена пользователей и сравнить их с именем пользователя, с которым я пытаюсь войти.
Эта строка кода создает ошибку, она не видит значения (всех пользователей, которых я сохранил) в Users:
const usernameCheck = Users.find(x => x.username = req.body.username);
Код для проверки пользователя:
router.route('/login').post(async (req, res) => {
const usernameCheck = Users.find(x => x.username = req.body.username);
if (usernameCheck === null) {
return res.status(400).send('Cannot find user');
}
try {
if (await bcrypt.compare(req.body.password, usernameCheck.password)){
res.send('Success')
} else {
res.send('Not allowed!')
}
} catch {
res.status(500).send()
}
});
Я создаю новых пользователей в «Пользователях» таким образом, в соответствии с созданной мной схемой mongoose:
router.route('/add').post(async (req, res) => {
try {
const hashedPassword = await bcrypt.hash(req.body.password, 10); // 10 is const salt = await bcrypt.genSalt/*10 is default*/);
const email = req.body.email;
const username = req.body.username;
const password = hashedPassword;
const IP = req.connection.remoteAddress;
const newUser = new Users({
email,
username,
password,
IP
});
newUser.save()
.then(() => res.json('User added!'))
.catch(err => res.status(400).json('Error: ' err));
} catch {
res.status(500).send()
}
});
Итак, как я могу просмотреть всех моих созданных пользователей, используя метод .find?
Комментарии:
1. я думаю, что его проверка на равенство и здесь
==
не должно быть=
rytconst usernameCheck = Users.find(x => x.username = req.body.username);
2. Я получаю эту ошибку «TypeError: не удается прочитать свойство ‘username’ из null», поэтому не должно быть проблем с
=
3. может быть, но все же это станет назначением…
Ответ №1:
Я не знаком с вашим синтаксисом, я обычно делаю что-то вроде этого:
Users.findOne({username: req.body.username}, 'username', (err, result) => {
if(err) {
throw err
}
if(!result) {
return res.status(400).send('Cannot find user');
}
// your verification
}
Комментарии:
1. Под «именем пользователя» вы подразумеваете те имена пользователей, которые я сохранил в БД?
2. ‘username’ — это имя вашего столбца