我想在云中拥有一个安全的api服务器。它包含登录,注册,注销等所有护照代码和路由。问题是我想通过http客户端(例如$ http或' request')从外部客户端调用此API。
是否有人使用外部API进行护照身份验证?我的情况怎么样,我介绍的唯一的事情是HTTP客户端。
我尝试使用调用localhost的Http客户端在本地设置它并且它不起作用。
这是我想最终迁移到云端并通过网络访问http客户端的登录API。
app.post('/api/login', passport.authenticate('local'), function (req, res) {
console.log("external Login API: " + req.user.email)
if(req.isAuthenticated()){
console.log("In Login. Apparently authenticated")
}
res.send(JSON.stringify(req.user))
});
这是调用调用外部api的函数的本地路由。
app.post('/app/login', publicLoginApi.login);
以下是调用外部登录api
的代码exports.login = function(req,res){
request({
url: 'http://localhost:3000/api/login', //URL to hit
qs: {from: 'Web App', time: +new Date()}, //Query string data
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
email: req.body.email,
password: req.body.password,
body: JSON.stringify({email: req.body.email, password: req.body.password})
}, function(error, response, body){
if(error) {
console.log("login request failed");
} else {
var user = JSON.parse(response.body)
if(req.isAuthenticated()){
console.log("Authentication working");
}
console.log("login request success");
console.log("Success user email: " + user.email)
//console.log(body)
//console.log(response.body.email)
return res.send(200,user)
}
});
}
不要忘记这一切仍然是本地的。如果我直接从我的HTML视图中调用/ api / login函数,一切正常。但是,如果我通过http调用/ app / login来模拟对/ api / login的外部调用,则/ api / login调用返回到/ app / login路由后面的回调时,req.isAuthenticated为false。正如您所看到的,我在本文的第三个代码块中测试了isAuthenticated。它失败了。是因为这不是一个有效的快速中间件模式(错误,req,res,next)因此无法传递内容吗?
如果有人可以提供有关外部api服务器的最终解决方案的建议以及我当前涉及http客户端的本地测试问题的解决方案,那将是很好的。