Node.JS Express到HTML数据传输

我正在用node.js创build一个login应用程序,我似乎遇到了从服务器到html的string传输领域的知识缺陷。

我张贴我的当前代码在jsfiddle 。 我的应用程序validation到MySQL表的凭据,然后生成一个基本令牌,其中包含用户名密码和用户的IP地址。

在最后一块代码中,客户端HTML发布到服务器,我有两个部分,你看到发送到基本用户页面,并发送到pipe理页面。 我试图研究这个问题,但我没有得到任何有关的情况。 任何人都可以引导我正确的方向发送用户到pipe理员或用户页面,同时发送令牌?

另外,快递服务器如何将数据发送到客户端,例如在页面上,我希望数据库能够保存关于用户的相关信息,如地址和电话号码。 这些信息如何通过html从服务器传输到客户端?

app.post('/', urlencodedParser, function (req, res) { var date = new Date(); con.query("SELECT * from users WHERE username=" + con.escape(req.body.username) + " AND password=" + con.escape(req.body.password), function (err, rows, fields) { if (err) { console.log(err); } else { var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress; if (rows == '' && rows == '') { console.log('User Failed to login to the server with @'.red + con.escape(req.body.username) + ':' + con.escape(req.body.password)); res.sendFile(__dirname + '/admin/failure.html'); } else { var isadmin = rows[0].admin; var cryptomap = [req.body.username + ',' + req.body.password + ',' + ip]; var strcryptomap = cryptomap.toString(); // convert array to string var token = encrypt(strcryptomap); console.log(token + ' SENT'.red); var backto = decrypt(token); //decr var arr = backto.toString().split(","); // SPLITTING STRING TO SATISFY /VERIFY ************************************************* console.log(arr[0] + ' has valid token, encryption succsessful'.green); con.query('UPDATE users SET crypto=' + con.escape(token) + 'WHERE username=' + con.escape(req.body.username), function (err, rows, fields) { if (err) { res.send(500); } else { console.log('Updated Crypto for ' + req.body.username); if (isadmin == 0) { // send to basic user page res.send('USER'); } else { //send to admin user page res.sendto('http://google.com/?' + token); } } }); } } }); }); 

首先,我会回答你所问的实际问题。

我通常处理你正在努力完成的方式是通过使用用户凭证(当然,https从不使用http发送凭证)的前端使用ajax POST,让服务器validation用户,创build令牌并响应到令牌的ajax职位。 从这里,如果身份validation成功,并且服务器使用令牌和任何其他您想获得的信息进行响应,则您有几个选项来存储它,我个人使用Cookie。 令牌存储后,让前端处理redirect。

说了这么多,我肯定会读到身份validation原理以及系统可能遭到攻击的不同方式。 我看到一些处理基本authentication思想/策略的红旗。

编辑:下面是一个示例AJAX发布到loginAPI端点,用令牌响应并将用户名和令牌保存到cookie。 显然,成功函数中的结果数据的组织方式可能与我的不同,但可以用相同的方式访问。 您可以将任何想要返回的数据发送给此结果对象,并相应地redirect

 var loginData = { username : $('#loginUsername').val(), password : $('#loginPassword').val() } $.ajax({ type : "POST", url : [your-endpoint-url], data : loginData , success : function(result) { setCookie('appUN', result.username); setCookie('appTok', result.token); location.href = '/dashboard'; }, error : function(result) { location.href = '/login/Error'; } }); function setCookie(cname, cvalue) { var d = new Date(); d.setTime(d.getTime() + 10800000); var expires = "expires="+d.toUTCString(); var path = "path=/"; document.cookie = cname + "=" + cvalue + "; " + expires + ";" + path; } 

要实际上将数据从服务器发送回客户端,在您的API端点中,您将执行所有逻辑来检查用户凭据,如果凭据是有效的,则可以创build令牌并返回类似

 res.json({ username: username, token: token }); 

这个JSON对象将会在成功函数中可用,如上所示。

如果用户凭据无效,则可以返回类似的内容

 res.status(400).json({Message : "The username or password is incorrect"}); 

并且由于400的状态,它会被你的AJAX请求的错误函数捕获