【问题标题】:user authorisation with express.js and mysql使用 express.js 和 mysql 进行用户授权
【发布时间】:2016-11-01 16:17:03
【问题描述】:

大家好,我一直在尝试为用户实现登录,但一直在努力解决如何在数据库中进行名称和密码的比较,以便他们可以使用会话登录,但我只能在下面做到这一点

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

}`

有人可以帮我登录吗,因为这是我唯一遇到的问题,在此先感谢

【问题讨论】:

    标签: mysql express


    【解决方案1】:

    如果这应该是“工作”代码: 1.您正在获取数据库中的所有用户(坏)。通过仅获得 1 个用户来解决此问题 2. 您正在对哈希值和普通值执行 bcrypt.compare,您不需要这些(不必要的处理,不好)。通过替换为 newUser.password === newUser.confirm_password 来解决此问题

    如果最后一段代码不完整,并且您需要查询/流程来验证用户身份: 1. SELECT (your fields) FROM Users WHERE (some identifier) = (identifier from login-form) 2. bcrypt.compare(passwordFromForm, hashFromQueryResult, setUserSession)

    在这种情况下,标识符是数据库中该用户唯一的字段。例如用户名、ID、电子邮件、电话号码等。这必须在登录表单中提供。 (在这种情况下为“名称”) - 但它必须是唯一的

    编辑:

    另外,我建议用 Passport.js 替换其中的大部分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 2014-03-16
      • 2012-09-01
      • 1970-01-01
      • 2010-10-30
      相关资源
      最近更新 更多