护照脸书登录"which is disallowed for cross-origin requests that require preflight"错误?



我有一个node.js express应用程序,它提供RESTful API,我使用passport进行Facebook身份验证。我在服务器端启用了所有CORS配置,并能够通过jQueryAjax使用API。但对于Facebook身份验证,我得到了以下错误:

XMLHttpRequest cannot load http://localhost:3000/auth/facebook. The request was redirected to 'https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=http%…_me%2Cuser_checkins%2Cuser_likes&client_id=12345678&type=web_server', which is disallowed for cross-origin requests that require preflight. 

/auth/facebook端点是这样的。

app.get('/auth/facebook',
    passport.authenticate('facebook', {
        scope: ['email', 'user_about_me', 'user_checkins', 'user_likes'],
        failureRedirect: users.authFailCallback
    }), users.signin);

因此,基本上它被重定向到不允许CORS的Facebook的API(302)。有什么办法解决这个问题吗?或者我需要从服务器端调用Facebook API?

这看起来可能是一个webkit错误:

https://bugs.webkit.org/show_bug.cgi?id=112471

你有没有尝试在最新的Firefox中重现这种行为?

现在(2013-12-05)解决这个问题的最佳方法是尽可能在服务器端进行调用。无论如何,你可能需要服务器端请求来允许IE 8兼容,因为IE 8不支持太多CORS规范。我使用相同的域代理来让IE 8工作。

祝你好运。

您不能从前端调用服务器api,这将导致302(重定向)。因此,你必须将用户直接发送到服务器,并将他从那里重定向到facebook。获取结果保存用户,然后将他重定向到任何你想要的

最新更新