使用MySQL和HTML创建Node.js登录表单

4

我从一个教程中得到了这个简单的代码,用于检测用户和密码是否在我的数据库中以进行用户注册的样本登录HTML表单。这段代码可以检测电子邮件是否存在,但无法检测密码。
这里出了什么问题?

var express = require('express');
var app = express();
var  server = require('http').createServer(app);
bodyParser = require('body-parser');
var mysql = require('mysql');
var connection = mysql.createConnection({
      host: 'localhost',
      database: 'chmult',
      user: 'root',
      password: '',
    });
users = [];
connections = [];


app.get('/', function(req, res){
    res.sendFile(__dirname + '/');

});



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

/**bodyParser.json(options)
 * Parses the text as JSON and exposes the resulting object on req.body.
 */
app.use(bodyParser.json());
connection.connect();


app.post('/', function(req, res){




var username= req.body.user.username;
var password = req.body.user.password;
connection.query('SELECT * FROM tesko WHERE username = ?',[username], function (error, results, fields) {
if (error) {
  // console.log("error ocurred",error);
  res.send({
    "code":400,
    "failed":"error ocurred"
  })
}else{
  // console.log('The solution is: ', results);
  if(results.length >0){
    if([0].password == password){
      res.send({
        "code":200,
        "success":"login sucessfull"
          });
    }
    else{
      res.send({
        "code":204,
        "success":"Email and password does not match"
          });
    }
  }
  else{
    res.send({
      "code":204,
      "success":"Email does not exits"
        });
  }
}
});




});




app.listen(3231);
console.log('Example app listening at port:3231');

我的HTML表单
<form method="post" action="">
    <input type="text" name="user[username]">
    <input type="text" name="user[password]">

    <input type="submit" value="Submit">
</form>
</html>

我的表格中的列名是(用户名,密码)。两者都是varchar类型的,我尝试使用其他具有md5的表格,但仍无法检测到密码。


3
好的!放弃这个做法并开始使用类似护照的东西。以明文形式保存密码是一个非常糟糕的主意。 - e4c5
我建议您使用 Passport。请前往 https://github.com/scotch-io/easy-node-authentication 并根据您的需求使用它。希望能有所帮助! - YanetP1988
@e4c5 谢谢,我会在下一步中加密密码。 - dark night
1个回答

2

这段代码看起来有些可疑:

if(results.length >0){
  if([0].password == password){
  res.send({
    "code":200,
    "success":"login sucessfull"
      });
}

特别是 [0].password,我认为这应该是未定义的。

在这里,[0] 是一个数组文字,而不是对数组的索引。从前面的一行可以判断出,你可能想要使用 results [0] .password


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接