авторизация пользователя с помощью express.JS и mysql

hey guys l have been trying to implement login for users but struggling on how to make the comparition in the database for name and the password so they can login with sessions but l’ve only managed to do this below

exports.userSignup = function(req, res) {
  res.render('signup');
};

exports.register = function(req, res, next) {
  req.getConnection(function(err, connection) {
    if (req.body.name && req.body.email && req.body.password) {
        // if user puts correct info the get save to database
        var newUser = {
            name: req.body.name,
            email: req.body.email,
            password: req.body.password,
            confirm_password: req.body.confirm_password
        };

        // using bycrypt to store hashed passwords
        var passwordStore = bcrypt.hash(newUser.password, saltRounds,     f      function(err, hash) {
            newUser.password = hash
            bcrypt.compare(newUser.confirm_password, hash, function(err, res) {
                newUser.confirm_password = hash
                connection.query('insert into Users set ?', newUser, function(err, results) {
                    if (err) return next(err);
                    req.flash("success", 'Welcome', newUser.name);
                    req.session.user = newUser;
                    res.redirect('/categories');
                });
            });
        });

    } else {
        var err = new Error('All fields must be filled. ')
            // req.flash("danger", "All fields must be filled")
        err.status = 400;
        return next(err)
    }
})

}

exports.login = function(req, res) {
  res.render('login')

}

exports.signIn = function(req, res, next) {
   req.getConnection(function(err, connection) {
    connection.query('SELECT name, email, password from Users', function(err,  rows, fields) {
        req.session.user = {
            name: req.body.name,
            password: req.body.password,
            is_admin: rolesMap[req.body.name] === "admin"
        }
        res.redirect("/categories")
    })
})

}`

Может кто-то, пожалуйста, помочь мне с моим логином, потому что это единственное, что я борюсь с и спасибо заранее

1 ответ

  1. Если это должен быть» рабочий » код:
    1. Вы получаете всех пользователей в базе данных (bad). Исправить это, получив только 1 пользователь
    2. Вы делаете bcrypt.сравните по хэшу и простому значению, которое вам там не нужно (unessesary processing, bad). Исправьте это, заменив newUser.пароль = = = newUser.confirm_password

    Если этот последний фрагмент кода является неполным, и вам нужен запрос / поток для аутентификации пользователя:
    1. Выберите (ваши поля) из пользователей, где (некоторый идентификатор) = (идентификатор из формы входа)
    2. bcrypt.сравнить (passwordFromForm, hashFromQueryResult, setUserSession)

    идентификатор в данном случае-это поле в базе данных, уникальное для данного пользователя. Например имя пользователя, идентификатор, электронная почта,номер телефона и т.д. Это должно быть предоставлено в форме входа в систему. («имя» в данном случае) — но оно должно быть уникальным

    РЕДАКТИРОВАТЬ:

    Кроме того, я бы предложил заменить большую часть этого паспортом.js