“这是不允许的,需要预检的错误”在护照Facebooklogin错误的交叉来源?

我有一个node.js快递应用程序,它提供了RESTful API,我使用的是用于Facebook身份validation的护照。 我启用了服务器端的所有CORSconfiguration,并能够通过jQuery Ajax使用API​​。 但是对于Facebook身份validation,我收到以下错误:

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); 

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

这看起来可能是一个webkit的bug:

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

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

现在(2013-12-05)最好的解决方法就是打电话给服务器端,如果可以的话。 您可能需要服务器端的请求来允许IE 8的兼容性,因为IE 8不支持CORS的许多规范。 我使用相同的域代理来获得IE 8的工作。

祝你好运。

你不能调用服务器API,这将导致从前端302(redirect)。 所以你将不得不直接发送用户到服务器,并将他从那里redirect到Facebook得到的结果保存用户然后redirect他无论你想