我正在尝试在我的Nodejs / Angular / Express / Passport应用程序中通过Facebook实现OAUTH登录,但我遇到了困难。
我仍然遇到CORS错误:
XMLHttpRequest已被CORS策略阻止:所请求的资源上没有'Access-Control-Allow-Origin'标头。因此,不允许从来源 'https://www.xxxxxx.net' 访问。
尽管我已经将其添加到我的EXPRESS ROUTER中:
router.all('/*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type');
if ('OPTIONS' === req.method) {
res.send(200);
}
else {
next();
}
});
在开发者控制台中,我可以看到“oauth/facebook”的GET调用的标头添加了“Access-Control-Allow-Origin”等内容。
在回调函数中没有“Access-Control-Allow-Origin”等内容 - 这样做是否正确?
router.get('/oauth/facebook/',passport.authenticate('facebook',{
failureRedirect: '/info',
scope:['email']
}));
router.get('/oauth/facebook/callback/', passport.authenticate('facebook',{
failureRedirect: '/info',
successRedirect: '/',
scope:['email']
}),
function(req,res){
if(req.user){
return res.json({token: req.user.generateJWT()});
} else {
return res.status(400).json({message:"Not found"});
}
});
Authorization
发送的;因此,您还应在头部中提供它:res.header('Access-Control-Allow-Headers', 'Authorization, Content-Type');
通常情况下,为了成功请求,请始终考虑提供这些头部信息:res.header('Access-Control-Allow-Headers', 'Authorization, Origin, X-Requested-With, Content-Type, Accept');
- dNitro