Node Mongo Express - я могу зарегистрировать пользователя, но не могу войти

Я создаю файл app.js и файл user.js, чтобы зарегистрировать пользователя, отправить данные в mongodb, а затем войти в систему пользователя. Я могу зарегистрировать пользователя, но если я пытаюсь войти, он не работает. Если я попытаюсь войти в систему пользователя, который «пользователь не существует», я получаю правильное сообщение, поэтому я думаю, что проблема заключается в строке 50 в файле app.js или в связанном user.js в User.isCorrectPassword но я не могу это решить. Любое предложение?

**app.js**

//declaring const express, path, bodyParser, app
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const app = express();

const bcrypt = require('bcrypt');
const mongoose = require('mongoose');
const User = require('./user');


app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.use(express.static(path.join(__dirname, 'public')));

const mongo_uri = 'mongodb+srv://mongo:******@****.****.mongodb.net/test?retryWrites=true&w=majority';

mongoose.connect(mongo_uri, function (err) {
    if (err) {
        throw err;
    } else {
        console.info(`successfully connected to ${mongo_uri}`);
    }
});


app.post('/register', function (req, res) {
    const { firstName, lastName, username, password } = req.body;

    const user = new User({ firstName, lastName, username, password });

    user.save(err => {
        if (err) {
            res.status(500).send('error for user registration');
        } else {
            res.status(200).send('registration complete');
        }
    });
});

app.post('/autenticate', function (req, res) {
    const { username, password } = req.body;

    User.findOne({ username }, function (err, user) {
        if (err) {
            res.status(500).send('error for user registration');
        } else if (!user) {
            res.status(500).send('the user does not exist');
        } else {
            User.isCorrectPassword(password, function (err, result) {
                if (err) {
                    res.status(500).send('autentication error');
                } else if (result) {
                    res.status(200).send('User autenticated');
                } else {
                    res.status(500).send('User and/or password wrong');
                }
            });
        }
    });
});


app.listen(3000, function () {
    console.info('server started');
})
module.exports = app;

User.js


const mongoose = require('mongoose'); //inluding mongoose
const bcrypt = require('bcrypt'); //to encrypt the password

const saltRounds = 10; //how many time the algorytm repite to encrypt

// we specify the field we need for the registration
const UserSchema = new mongoose.Schema({
    firstName: { type: String, required: true },
    lastName: { type: String, required: true },
    username: { type: String, required: true, unique: true }, //user has to be unique
    password: { type: String, required: true }
});

// we could execute the function before data ara saved
UserSchema.pre('save', function (next) {
    if (this.isNew || this.isModified('password')) {
        const document = this;

        bcrypt.hash(document.password, saltRounds, function (err, hashedPassword) {
            if (err) {
                next(err);
            } else {
                document.password = hashedPassword;
                next();
            }
        });
    } else {
        next();
    }
});

UserSchema.methods.isCorrectPassword = function (candidatePassword, callback) {
    bcrypt.compare(candidatePassword, this.password, function (err, same) {
        if (err) {
            callback(err);
        } else {
            callback(err, same);
        }
    });
}

module.exports = mongoose.model('User', UserSchema);
Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
app.post('/autenticate', function (req, res) {
    const { username, password } = req.body;

    User.findOne({ username }).then(
      (user, err)=> {
        if (err) {
            res.status(500).send('some error occured');
        } else if (!user) {
            res.status(500).send('the user does not exist');
        } else {
          if (!bcrypt.compareSync(password,user.password))
              return res.status(401).send("wrong password");
            return res.status(200).send('autenticated successfully');            
        }
    }
    )
});

Это работает, большое спасибо rooteduser !!

Valerio Viale 21.11.2022 15:40

Другие вопросы по теме