我目前正在创建一个Web应用程序,当用户登录时,我不希望页面被重定向 - 相反,我希望客户端只是简单地更新当前页面(我考虑使用AJAX请求)。我使用带有护照的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进行身份验证?有没有更好的方法来实现这一目标?
答案 0 :(得分:0)
我无法在您的代码中看到您实际将凭据信息发送到您的服务器。假设" /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默认标头中。通过这种方式,它将包含在将来对服务器的所有调用中。