如何使用Passport Facebook登录而不重定向?

我正在构建一个phonegap应用程序,它将在服务器端具有NodeJ。我想使用passport facebook策略实现登录,但它们的回调指定了两条路径,/successcallback和/failurecallback。使用单页应用程序,将用户重定向到某个页面会让人非常困惑

我不想从服务器提供静态文件(index.html、login.html),而是将它们放在客户机上,让客户机进行ajax调用。到目前为止,我能够以AJAX请求的形式调用/auth/facebook,但我无法收到同一请求的任何响应,因为登录策略需要重定向用户。我更希望在成功登录时将用户id或名称发送回用户,或者在失败时向用户显示登录表单(也在phonegap的www目录中)。但是重定向和CORS错误阻止了我这样做。我有什么办法可以实现这一点吗?我已经找了几个星期了,但是没有成功。我真的很感激你的帮助

PS:我宁愿避免从节点服务器发送所有html和静态内容

编辑:添加登录代码以更好地理解:

app.get('/userpage',utility.isLoggedIn,function(req,res)
{
res.send('用户:'+请求用户);
});
app.get('/',utility.isLoggedIn,function(req,res)
{
res.redirect('/userpage');
});
app.get('/auth/facebook',passport.authenticate('facebook');
app.get('/auth/facebook/callback',passport.authenticate('facebook'),
{
successRedirect:“/”,
failureRedirect:“/login”
}));
app.get('/logout',函数(req,res)
{
请求注销();
res.redirect('/login');
});
utility.isLoggedIn:
函数isLoggedIn(请求、恢复、下一步)
{
如果(请求isAuthenticated())
返回next();
res.redirect('/login');
}

facebook oAuth无法做到这一点,但facebook提供了另一个登录解决方案,您可以在其中对客户端应用程序进行编码,以请求令牌,稍后您可以使用passport facebook令牌在服务器上进行验证

通过这种方式,您可以将passport的优点用于持久会话,而无需烦人的重定向

发表评论