【问题标题】:validation of password and username nodejs mysql验证密码和用户名 nodejs mysql
【发布时间】:2019-05-04 19:15:32
【问题描述】:

我正在做一个项目,我正在尝试使用 mysql 作为数据库在 nodejs-html 上构建一个登录页面。但我的代码直接得到“response.send('请输入用户名和密码!');”部分,并显示该页面。(mysql连接没有问题)为什么我不能检查登录用户名和密码是否正确?如果属实,则转到下一页?

var mysql = require('mysql');
var express = require('express');
var session = require('express-session');
var bodyParser = require('body-parser');
var path = require('path');

var connection = mysql.createConnection({
    ....................
});
connection.connect((err) => {
    if(err){ 
    throw err;}
   else console.log("connected");
});

var app = express();
app.use(session({
    secret: 'secret',
    resave: true,
    saveUninitialized: true
}));
app.use(bodyParser.urlencoded({extended : true}));
app.use(bodyParser.json());


app.get('/', function(request, response) {
    response.sendFile(path.join(__dirname + '/login.html'));
});

app.post('/', function(request, response) {
    var username = request.body.user_name;
    var password = request.body.pass;
    console.log(username);

    if (username && password) {
        connection.query('SELECT * FROM users WHERE user_name = ? AND pass = ?', [username, password], function(error, results, fields) {
            console.log(username);
            if (results.length > 0) {
                request.session.loggedin = true;
                request.session.user_name = username;
                response.redirect('/secondPage');
            } else {
                response.send('Incorrect Username and/or Password!');
            }           
            response.end();
        });
    } else {
        response.send('Please enter Username and Password!');
        response.end();
    }
});

app.get('/login', function(request, response) {
    if (request.session.loggedin) {
        response.send('Welcome back, ' + request.session.username + '!');
    } else {
        response.send('Please login to view this page!');
    }
    response.end();
});

app.listen(3000);

【问题讨论】:

  • 如果你在 mysql 控制台中执行SELECT * FROM users WHERE user_name = some_user AND pass = some_pass 并使用你通过请求传递的值,你会得到任何结果吗?
  • 我已经尝试过了。问号是问题,但现在我已经将我的 SQL 转换为:“select * from users”并且它可以工作。
  • 请不要像这样以纯文本(可读)存储此人的密码。使用密码加密算法加密密码并将其存储在您的数据库中。然后,当他们登录时,您对他们刚刚输入的密码进行加密并比较两个加密值。存储未加密的密码是一个巨大的安全问题。
  • 添加您的解决方案作为答案,并始终注意@nate 所说的内容
  • @Nate 感谢您的提醒。现在我以 blob 的形式存储密码值并使用 AES_ENCRYPT 插入数据。我一直在寻找这个。

标签: html mysql node.js


【解决方案1】:
.body.user_name is undefined that's why 

你一定忘记了 html 中的 name 属性

input type="text" name="user_name"

还有密码

 <input type="password" name="pass"  >

给它们合适的名称属性,以便主体对象可以访问它们

【讨论】:

  • 所以你说 HTML 代码应该包含“user_name”作为输入名称?试过这个,现在我可以在 console.log 上看到用户名。但同样的问题仍然存在。
  • 您是否忘记将名称属性赋予密码为 name="pass" 。用户名正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2018-05-26
  • 2013-12-26
  • 2016-01-24
相关资源
最近更新 更多