Javascript 使用ajax和node.js进行RESTful登录
我正在努力使用一种相当简单的方法登录服务器,稍后为了确保我仍然登录,我会发送一个GET请求来接收我的用户名。我使用一个node.js服务器和一个使用JQuery的页面对象Javascript 使用ajax和node.js进行RESTful登录,javascript,jquery,json,ajax,node.js,Javascript,Jquery,Json,Ajax,Node.js,我正在努力使用一种相当简单的方法登录服务器,稍后为了确保我仍然登录,我会发送一个GET请求来接收我的用户名。我使用一个node.js服务器和一个使用JQuery的页面对象 // prints User name to the console if logged in function getUserName() { $.ajax({ url: "http://localhost:4730/login", type: "GET", data
// prints User name to the console if logged in
function getUserName() {
$.ajax({
url: "http://localhost:4730/login",
type: "GET",
dataType: "json",
success: function (resJson) {
$.each(resJson, function (i, userName) {
console.log(userName);
});
},
error: function (xhr, status) {
console.log("Sorry, there was a problem!");
}
});
}
// login a known user
function login(name, password) {
var userData = {
name: name,
password: password
};
$.ajax({
url: "http://localhost:4730/login",
type: "POST",
dataType: "json",
data: userData,
error: function (xhr, status) {
console.log("Sorry, there was a problem!");
},
complete: function (xhr, status) {
console.log(xhr);
}
});
}
My server node.js正在生成一个虚拟用户id,并在下一个GET请求到达时检查该id
// Checks if the user is logged in and returns its name or an empty string
app.get('/login', function (req, res) {
if (typeof (req.session.user_id) == "number") {
res.json(users[req.session.user_id].name);
return;
}
res.json("");
});
// Check if the user exists and if the password is correct
app.post('/login', function (req, res) {
var post = req.body;
var user = findUser(post.name);
if( !!user && post.password == user.password)
{
req.session.user_id = user.id;
res.json(true);
return;
}
res.json(false);
});
我的用户已注册,登录请求已成功返回。但登录后,我对getUserName的GET请求返回一个空字符串。我不知道session.user\u id设置在哪里?客户现在不是必须这样做吗
我已经看到了一些使用passport等的解决方案,但我想了解会话/用户id处理的基本原理
非常感谢您的帮助这里:
var post = req.body; // the request body with username & password.
var user = findUser(post.name); // you are extracting the username
if( !!user && post.password == user.password)
//---------------------------^^^^^^^^^^^^^-----this isn't available in it.
在var post中,您拥有所有已发布的请求正文,其中包含名称和密码。
在您的var用户中,您正在从发布的值中提取名称。
现在在您的if条件下,我认为user.password不可用。
请确保从findUserpost.name返回对象,或将其更改为:post.password!= 嗨,洁,非常感谢你的回复。我应该提到,我的用户已经注册,密码比较成功。在我看来,我的客户机现在不知道它的用户id,它在这里分配:req.session.user_id=user.id;再次感谢。