我想要完成的是通過ajax使用護照進行用戶認證。推薦使用護照的方式是通過GET
請求觸發授權過程,該請求使用常規的<a>
標籤觸發。成功(或失敗)身份驗證後,將重定向到新頁面。現在,而不是使用HTML鏈接來觸發我想通過ajax做的路線。這裏的問題是,當我嘗試這與第三方身份驗證策略,如passport-facebook
我得到一個CORS錯誤:通過ajax的護照認證
XMLHttpRequest cannot load [the facebook auth URL]' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost:8080' is therefore not allowed access.
下面是相關的服務器端代碼:
// route for facebook authentication and login
app.get('/auth/facebook', passport.authenticate('facebook', { scope : ['email'] }));
// handle the callback after facebook has authenticated the user
app.get('/auth/facebook/callback', (req, res, next) => {
passport.authenticate('facebook', (err, user, info) => {
req.login(user, function(err) {
if(err) return next(err);
return res.status(200).json({
success: "All good man!"
});
})
})(req, res, next);
});
雖然在瀏覽器我簡單地做:
axios.get('/auth/facebook').then((response) => {
console.log(response);
});
我發現several類似questions但沒有人似乎有一個令人滿意的答案。有沒有辦法實際做到這一點?或者一個聰明的解決方法?也許一種方式仍然發回JSON響應,即使路由是使用HTML鏈接觸發的?
嗯......聽起來好像是你知道的事我不知道:)雖然他們實際上做的工具正在回饋一個令牌以用於後續的API請求。另外,令我困惑的是,實際的身份驗證過程僅通過服務器發生。在瀏覽器中發生的唯一事情是啓動所述過程(觸發'GET/auth/facebook')。在我的理解中,認證的其餘部分(相同的登錄/認證表單)應該完全相同。但我覺得我在那裏失去了一些東西。無論如何,我認爲我找到了一個沒有AJAX的解決方法:)但是,謝謝! – Flavio
嘿@弗拉維奧,你能分享你的解決方法嗎?我的情況非常相似。 – mdeang2
我只是用它的工作方式,用一個'''標籤。然後,成功驗證後,我重定向回到「/」。然後在瀏覽器中,我通過Ajax檢查用戶是否已登錄,並據此進行路由......感覺有點冒失,但完成了這項工作。 – Flavio