我正在构建一个 phonegap 应用程序,它将在服务器端安装 nodejs。我想使用 passport-facebook 策略实现登录,但他们的回调指定了两个路由,/successcallback 和/failurecallback。拥有一个单页应用程序,这使得将用户重定向到某某页面变得非常困惑。
我不想从服务器提供静态文件(index.html、login.html),而是将它们放在客户端上并要求客户端进行 ajax 调用。到目前为止,我可以将/auth/facebook 调用作为 AJAX 请求,但我无法收到对同一请求的任何响应,因为登录策略需要重定向用户。我宁愿在成功登录时向用户发送 user_id 或名称,或者在失败时向他显示登录表单(也在 phonegap 的 www 目录上)。但是重定向和 CORS 错误阻止了我这样做。有什么办法可以实现吗?几个星期以来我一直在寻找这个,但没有成功。非常感谢您的帮助!
PS:我宁愿避免从 Node 服务器发送所有 html 和静态内容。
编辑:添加登录代码以便更好地理解:
app.get('/userpage', utility.isLoggedIn, function(req, res)
{
res.send('User:'+req.user);
});
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', function(req, res)
{
req.logout();
res.redirect('/login');
});
utility.isLoggedIn:
function isLoggedIn(req, res, next)
{
if (req.isAuthenticated())
return next();
res.redirect('/login');
}
最佳答案
Facebook oAuth 无法做到这一点,但 Facebook 提供了 another login solution您可以在其中编写客户端应用程序以请求 token ,稍后您可以在服务器上使用 passport-facebook-token 进行验证.
通过这种方式,您可以将 Passport 的优势用于持久 session ,而无需烦人的重定向。
关于ajax - 如何在没有重定向的情况下使用 Passport-Facebook 登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24595817/