簡體   English   中英

CORS - Facebook - 護照

[英]CORS - Facebook - Passport

我正試圖在我的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();
    }
});

在Developer Console中,我可以看到“oauth / facebook”GET調用的Header正在添加“Access-Control-Allow-Origin”等等。

在Callback中沒有'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>

這可以確保沒有角度處理此請求。

它在服務器端調用此路由:router.get('/ oauth / facebook /',passport.authenticate('facebook',{failureRedirect:'/#!/ home',scope:['email']})) ;

哪些回調:

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

在我的情況下,我還需要返回一個用於登錄的令牌:你需要自己處理響應,並將調用重定向到角度側的自己的'FB'路由,這基本上將我的身份驗證密鑰帶到Angular並登錄用戶。

跨源資源共享(CORS)機制為Web服務器提供跨域訪問控制,從而實現安全的跨域數據傳輸。

index.js :(服務器)

const cors = require('cors');
..
..
app.use(cors());

有關使用cors的更多信息: npm cors

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM