【问题标题】:Username and password validation in Node.js [duplicate]Node.js 中的用户名和密码验证 [重复]
【发布时间】:2014-08-09 20:52:48
【问题描述】:

我创建了名为“USERS”的数据库,并在它看起来像的数据库中创建了“USERS”表

现在我运行'localhost:8000'。我在控制台中收到了 login.html 和“已连接”消息。现在我想知道在 login.html 中输入用户名密码后,我想在“验证”按钮单击时验证用户名密码。我怎样才能做到这一点?????请帮助我。

Server.js:

var http=require('http');
var express=require('express');
var fs=require('fs');
var mysql=require('mysql');
var app=express();
var server=http.createServer(app);
server.listen(8000);
var connection=mysql.createConnection({
host:'localhost',
user:'root',
password:'root'
});
connection.connect(function(err) {
if(!err)
 {
 console.log('connected');
 }
});
app.get('/', function(request,response){
fs.readFile('login.html', function(Error,Res){
if(!Error)
{
response.writeHead(200,{'content-type':'text/html'});
response.write(Res);
}
});
});

login.html:

<html>
<head>
<title>Angular Js</title>
<script src="assets/js/Angular.min.js"></script>
<style>
</style>
<body>
<input id="username" />
<input id="password" />
<button id="submit">Verify</button>
</body>
</html>

【问题讨论】:

  • 您似乎对所涉及的技术有合理的掌握,您卡在哪里了?
  • 请,不要以明文形式将密码存储在数据库中。这是一个非常糟糕的主意。相反,存储密码的单向哈希(SHA-1 等)并检查密码,您对他们提供的内容进行哈希处理并将其与您持有的哈希值进行比较。这样一来,受损的数据库就不会泄露每个人的密码。
  • 密码可见供您参考
  • 我不会将“root”称为真正的密码。无论如何,这可能是他的开发机器。 @T.J.Crowder:你忘了提盐腌。未加盐的哈希值几乎和明文密码一样糟糕。
  • @ThiefMaster:我以为会有一些后续阅读。但我真的应该在某个地方说“salted”。 (“root”?您的意思是“Admin”吗?)

标签: javascript jquery html node.js


【解决方案1】:

您需要对代码进行一些更改..

作为第一步,您需要为 Express 框架添加一些中间件来处理发布数据 - 类似于:

var app=express();
var bodyParser = require('body-parser')
app.use( bodyParser.urlencoded() ); 

从 html 页面开始,您的输入字段需要包含在表单中 - 否则当您单击提交时,它们将不会/无法发布到任何内容。

<body>
    <form id="someform" action="/login" method="post">
        <input id="username" />
        <input id="password" />
        <button id="submit">Verify</button>
    </form>
</body>

然后,在您的 server.js 中添加一个新方法来处理对 /login url 的发布请求,然后您就可以在其中读取提交的值并对其进行适当的处​​理。

app.post('/login', function(sReq, sRes) {
        var username = sReq.body.username;
        var password = sReq.body.password;

        if (username=='myusername' && password == 'mypassword') {
               // do something here with a valid login

        } else { 
               // user or password doesn't match
        }
});

查看How to retrieve POST query parameters? 以获得更多提示。

这个例子没有做任何关于将提交的值与数据库进行比较或加密密码的事情,但可能会帮助您开始提交帖子数据并在 Node.js 中访问它。

这也不是您计划在生产环境中使用的事情中应该做的事情 - 密码应该被加密,并且您需要很多其他的东西来处理会话状态。

到目前为止,最好的选择是找到并使用一些预构建的身份验证中间件 - 并对其进行配置以满足您的需求。

【讨论】:

  • 这是比(更复杂和更具体的)用户身份验证更准确的条件字段确认。我发现这个答案有问题,因为它展示了绝对是最糟糕的身份验证方式,因为它根本没有解决如何适当地做到这一点。
  • 同意 Jared - 因为此代码不适合以任何方式、形状或形式的生产环境。但是,在有人试图开始使用 node 的问题的背景下查看它,我觉得概述一些基础知识可能很有用。
  • 为什么我得到用户名,密码在控制台中未定义???
猜你喜欢
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
相关资源
最近更新 更多