javascript - CORS - Facebook - Passport

标签 javascript node.js facebook express passport.js

我正在尝试在我的 Nodejs/Angular/Express/Passport 应用程序中通过 Facebook 实现 OAUTH 登录,但我正在努力解决这个问题。

我仍然收到 CORS 错误:

XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin” header 。产地' 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();
    }
});

在 Developer Console 中,我可以看到“oauth/facebook”GET 调用的 header 添加了“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"});
    }
});

最佳答案

我在这个设置中有多次失败导致了这次失败。

首先,您需要使用 href 调用链接“/oauth/facebook/”:

<a href="/oauth/facebook/" class="btn btn-primary"><span class="fa fa-facebook"></span> Login with Facebook</a>

这确保不是 Angular 处理这个请求。

它在服务器端调用这条路由: router.get('/oauth/facebook/',passport.authenticate('facebook',{ failureRedirect: '/#!/home', 范围:['电子邮件'] }));

哪些回调:

router.get('/oauth/facebook/callback/', passport.authenticate('facebook',{
      failureRedirect: '/#!/info',
      scope:['email']
  }),
  function(req,res){
    if(req.user){
      return res.redirect(303, '/#!/fb/' +req.user.generateJWT());
    } else {
      return res.status(400).json({message:"Not found"});
    }
});

在我的例子中,我还需要返回一个用于登录的 token :你需要自己处理响应,并将调用重定向到 Angular 端自己的“FB”路由,这基本上只是将我的身份验证 key 带到 Angular 和登录用户。

关于javascript - CORS - Facebook - Passport ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42002777/

相关文章:

javascript - 将数据从数据库发送到客户端,而无需使用模板引擎(node.js)

git - 在 Heroku 应用程序中包含第二个独立存储库?

ruby-on-rails - Ruby omniauth-oauth2 - A Errno::ENETUNREACH - 网络无法访问 - 连接(2)

facebook - 包括已弃用的 Facebook header 文件夹会出错

javascript - 我们真的需要多线程 JavaScript 吗?

javascript - 使地址栏在窗口中只读

javascript - 如何对 UI 网格中的列进行排序?

javascript - mysql2 中的 promise

node.js - 最小的 azure node.js 配置以纯文本形式提供 .js 文件,而不是处理它们

ruby-on-rails - Omniauth-facebook 的 Facebook Canvas 身份验证重定向问题(在 iframe 外部重定向)