Извините, если оказалось, что я упустил что-то действительно очевидное, но у меня некоторое время возникали проблемы с этим кодом, и я просто не понимаю его. В настоящее время я пытаюсь работать над аутентификацией. Система для приложения, которое я разрабатываю для школы, и для этого я делаю конечную точку API, которая берет введенный пароль, хэширует его, затем сравнивает его с сохраненным хешированным паролем, чтобы увидеть, совпадают ли эти два. Мой текущий код выглядит так this:
router.route('/auth/').post((req, res) => {
const userName = req.body.userName;
const password = User.generateHash(req.body.password);
let query = User.findOne({"userName": userName},{_id:0, userType:0, fName:0, lName:0, password:1, email:0, userName:0, __v:0});
let serverpass = query.get("password");
if (serverpass == password) {
res.status(200).json("User Authenticated!");
} else {
res.status(400).json("Passwords do not match." + password + " " + serverpass)
}
})
Основываясь на том, что я прочитал, метод findOne () возвращает необъяснимый документ, который вы можете получить значения с помощью метода .get (). Однако всякий раз, когда я его тестирую при использовании клиента REST переменная serverpass всегда возвращается как объект типа Object, а метод get () всегда возвращает undefined. Любая помощь по этому вопросу будет принята. Для справки, вот запись базы данных, которую я пытаюсь прочитать:
{
"_id": *REDACTED*,
"userType": "AuthTest",
"fName": "Auth",
"lName": "Test",
"password": *REDACTED*,
"email": "new@new.com",
"userName": "AuthTest",
"__v": 0
},
, где пароль является просто хэшем "password". Предоставляемая информация для клиента REST:
* 100 8 *
Спасибо!