bcrypt.сравните JWT с NodeJS, Мангуст всегда выдает ошибку

#node.js #mongodb #jwt #bcrypt

Вопрос:

я сталкиваюсь с этими довольно глупыми проблемами, когда пытаюсь реализовать JWT в NodeJS, Мангуст как мой механизм аутентификации.

допустим, я попытался реализовать функцию входа в систему с помощью этого кода (NodeJS)

 const post_login = async (req, res, next) => {
    const userData = req.body;

    try {
        const user = await User.login(userData);
        res.status(200).json({user: user._id});
    } catch (error) {
        res.status(400).json({});
    }
    // res.json(userData)
};
 

затем я включаю эту функцию в данные моей модели

 UserSchema.statics.login = async function(userData){
    const {email, password} = userData;
    const user = await this.findOne({email});
    
    if (user) {
        const auth = await bcrypt.compare(password, user.password)
        if (auth) {
            return user;
        }
        throw Error('Password do not match');
    } 
    throw Error('Email is not registered');
};

 

я успешно реализовал bcrypt.hash при хранении моих данных в MongoDB. но, когда я пробую этот код, он всегда выдает ошибку (статус 4000). после того, как я проведу некоторую отладку, проблема в том, что

  1. Во время отладки я await bcrypt.compare(password, user.password) обнаружил , что это похоже на сравнение нешифрованного «пароля» с сохраненным (хэшированным) паролем «user.password».
  2. если я пропустил bcrypt.compare , он возвращает соответствующие данные документа (даже если указанный пароль не совпадает).
  3. Отображается сообщение об ошибке
 (node:11784) UnhandledPromiseRejectionWarning: Error: data and hash arguments required
    at Object.compare (E:practicejwtnode_modulesbcryptbcrypt.js:208:17)     
    at E:practicejwtnode_modulesbcryptpromises.js:29:12
    at new Promise (<anonymous>)
    at Object.module.exports.promise (E:practicejwtnode_modulesbcryptpromises.js:20:12)
    at Object.compare (E:practicejwtnode_modulesbcryptbcrypt.js:204:25)     
    at E:practicejwtmodelsuser-model.js:67:20
(Use `node --trace-warnings ...` to show where the warning was created)
(node:11784) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This 
error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:11784) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the 
Node.js process with a non-zero exit code.
 
  1. Я бегу по nodeV14

имейте в виду, что кто-нибудь знает, как это исправить, заранее спасибо