ajax - 如何在没有重定向的情况下使用 Passport-Facebook 登录?

标签 ajax node.js cordova passport.js url-redirection

我正在构建一个 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/

相关文章:

javascript - 使用 jQuery 在 IE8 中淡入和淡出时遇到问题

java - 调用 java WebServlet 时收到 Ajax 错误 404

ajax - Javascript 从 https 服务器获取请求到本地主机 :port with self signed SSL

node.js - sails-auth 生成器不起作用

node.js - nodejs 基于域的路由

ios - 在 iOS 上运行 ionic 应用程序时出现 NSURLConnection 错误 1100

jquery - 更新 AJAX 调用上的 URL?

c# - Node/边缘 : alternative to node. exe.config

android - PhoneGap 在后台上传数据

android - PhoneGap 程序错误 "Web page not available"