在外部API服务器上使用护照进行身份验证

时间:2016-07-19 04:04:34

标签: passport.js

我想在云中拥有一个安全的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客户端的本地测试问题的解决方案,那将是很好的。

0 个答案:

没有答案