Javascript 无重定向安全性的Passport登录(Node.js)

Javascript 无重定向安全性的Passport登录(Node.js),javascript,json,node.js,passport.js,Javascript,Json,Node.js,Passport.js,我目前正在制作一个web应用程序,当用户登录时,我不希望页面被重定向——相反,我希望客户端只需更新其上的当前页面(我考虑过使用AJAX请求)。我正在使用带有passport的nodejs后端作为身份验证中间件 客户端: 我当前有一个页面,我想检查登录状态,以便简单地调用onload函数: function fetchLoginStatus(){ var request = new XMLHttpRequest(); request.open("GET", "/checkLogin

我目前正在制作一个web应用程序,当用户登录时,我不希望页面被重定向——相反,我希望客户端只需更新其上的当前页面(我考虑过使用AJAX请求)。我正在使用带有passport的nodejs后端作为身份验证中间件

客户端:

我当前有一个页面,我想检查登录状态,以便简单地调用onload函数:

function fetchLoginStatus(){
    var request = new XMLHttpRequest();
    request.open("GET", "/checkLogin.json", false);
    request.send();
}
服务器端:

在服务器中,我有以下路由:

app.get('/checkLogin.json', passport.authenticate('local-login'), function(req, res){
    res.send(req.user.username);
});
回到客户端,我检查此响应数据以查看用户是否已成功登录


这安全吗?使用JSON进行身份验证?有没有更好的方法来实现这一点?

我在您的代码中看不到您确实向服务器发送了凭据信息。假设“/checkLogin.json”不是json对象,而是http端点的名称,则必须使用POST请求的主体发送凭据信息(通常是用户和密码),如dylants所说。例如:

//client side, angular.js: post with user, password
 $http({
            method: 'POST',
            url: '/api/login',
            data: {usr: usr, psw:psw}
        }).
            success(function(data, status, headers, config) {
                $rootScope.authcode = self.ROLE_AUTH;
                $http.defaults.headers.common.Authorization = data.tkn;
                cb(null);
            }).
            error(function(data, status, headers, config) {
                console.log("error loggin in", data, status);
                cb("AUTHENTICATION_ERROR");
            });
然后,在服务器端,您使用凭据信息与某个后端服务(通常是BD)进行验证,并返回身份验证令牌:

exports.login = function(request, reply){

    var usr = request.payload.usr;
    var psw = request.payload.psw;

    var token = MuAuth.login(usr, psw, function(token){
        if(token != null){
            reply({tkn:token});
        }else{
            var error = Hapi.error.badRequest('auth error');
            //return 401 if authorization fails
            error.output.statusCode = 401;
            error.reformat();
            reply(error);
        }
    });
};

请注意,在客户端,如果身份验证调用成功,authtoken将添加到http默认头中。这样,它将包含在以后对服务器的所有调用中

使用API(JSON)进行身份验证是很正常的,但通常这是通过
POST
请求而不是
GET
完成的。其中包含登录凭据(这意味着它实际上应该是HTTPS)。这就是你的意思吗?