簡體   English   中英

客戶端(角度2)身份驗證,護照谷歌作為服務器中的提供者(node.js)

[英]Client (angular 2) authentication , passport google as provider in server (node.js)

我一直在尋找答案。

我有一個帶有一些REST端點的nodejs服務器。 每個端點都有isLoggedIn中間件,因此我可以通過它的電子郵件對用戶進行身份驗證。

客戶端在端口4200上運行,服務器在端口3113上運行。

我想要的是基本上讓我的客戶重定向到Google的同意屏幕,如果沒有經過身份驗證。 由於端口不同,我得到:

XMLHttpRequest cannot load https://accounts.google.com/o/oauth2/v2/auth?response_type=code&redirect_ur…d=604408607019-ha937stehe6s3nk7ea892rviihrq5n4s.apps.googleusercontent.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.

現在,我還沒有嘗試過...... :)

我嘗試使用CLI代理功能(它是一個webpack配置)並將所有/api請求轉發到服務器。

我已經向服務器添加了標題,但后來我意識到Google正在發送此錯誤,而不是我的服務器。

我在這里看到很多相關的帖子。 到目前為止我看到的最好的解決方案是放置一個login按鈕,然后將調用auth放入href ,因為我不能在域之間進行ajax調用。

這真的是最好的解決方案嗎? 在身份驗證代碼在服務器上運行時,是不是可以從客戶端進行身份驗證?

我甚至為api添加了所有相關端口,並向Google開發者控制台添加了回調調用。

順便說一下,當客戶端從同一個端口提供服務時,一切運行良好。

謝謝。

有點晚了,但我有你的解決方案。 我自己解決了這個問題,當我在尋找解決方案時,我偶然發現了你的問題。 您將無法通過Angular從Google身份驗證本身調用.http.get()請求。 您需要做的是重定向window.location.href = 'your-express-uri-here' ,然后在進行身份驗證時,您可以創建一個新的Express路由,並從該路由獲取用戶數據本身。 例如,您可以從角度調用.http.get('your-profile')然后在您的快速路線router.get('your-profile/', (req, res) =>{ res.send(req.user) }您的路線設為router.get('your-profile/', (req, res) =>{ res.send(req.user) }這是有效的,因為使用Passport您使用cookie,當您登錄時,您已經過身份驗證,並且您可以訪問用戶的數據。您無需從登錄中獲得GET請求獲取用戶數據,只需在使用Google + Passport登錄后從您的節點應用程序獲取GET請求。為此,您必須在代理中運行Angular到您的節點應用程序。

暫無
暫無

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

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