Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ajax和node.js进行RESTful登录_Javascript_Jquery_Json_Ajax_Node.js - Fatal编程技术网

Javascript 使用ajax和node.js进行RESTful登录

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

我正在努力使用一种相当简单的方法登录服务器,稍后为了确保我仍然登录,我会发送一个GET请求来接收我的用户名。我使用一个node.js服务器和一个使用JQuery的页面对象

//  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;再次感谢。