我正在使用node.js创建一个登录应用程序,我似乎在将字符串从服务器传输到html方面遇到了知识缺陷。
我在jsfiddle发布了我当前的代码。 我的应用程序验证mysql表的凭据,然后生成一个基本令牌,其中包含用户名密码和用户的IP地址。
在客户端html发布到服务器的最后一段代码中,我有两个段,您可以看到发送到基本用户页面并发送到管理页面。 我试图研究这个问题,但我没有得到任何与此相关的信息。任何人都可以在将用户发送到管理员或用户页面时向我指导正确的方向吗?
同样,快递服务器如何将数据发送到客户端 在页面上,我希望数据库保存有关用户的相关信息,如地址和电话号码。如何通过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);
}
}
});
}
}
});
});
答案 0 :(得分:2)
首先,我将回答您提出的实际问题。
我通常处理您要完成的任务的方法是使用前端的ajax POST和用户凭据(当然,https,永远不会使用http发送凭据),让服务器对用户进行身份验证,创建令牌并使用令牌响应ajax帖子。从这里开始,如果身份验证成功并且服务器使用令牌以及您想要获得的任何其他信息进行响应,您可以选择存储它,我个人使用cookie。存储令牌后,让前端处理重定向。
说完所有这些之后,我肯定会阅读有关身份验证原则以及系统受到攻击的不同方法。我看到了几个涉及非常基本的身份验证思想/策略的红旗。
编辑:以下是登录API端点的示例AJAX帖子,该端点使用令牌进行响应并将用户名和令牌保存到Cookie。显然,成功函数中的结果数据可能与我的不同,但可以以相同的方式访问。您可以在此结果对象中发送您想要的任何数据,并相应地重定向
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端点中,您将执行所有逻辑来检查用户凭据,如果他们的凭据有效,您可以创建令牌并返回类似< / p>
res.json({
username: username,
token: token
});
并且此JSON对象将在成功函数中可用,如上所示。
如果用户凭据无效,您可以返回类似
的内容res.status(400).json({Message : "The username or password is incorrect"});
由于400状态,它将被您的AJAX请求的错误功能
捕获