2016-11-01 2 views
0

эй, ребята, я пытался внедрить логин для пользователей, но борется за то, как сделать сравнение в базе данных для имени и пароля, чтобы они могли входить в систему с сеансами, но я только управлял сделать это нижеавторизация пользователя с помощью express.js и mysql

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") 
    }) 
}) 

} `

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

ответ

0

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

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

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

EDIT:

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

Смежные вопросы