所以我試圖做谷歌oauth爲我的用戶(實際上並沒有使用谷歌oauth來保存用戶)得到一個刷新令牌。當我使用客戶端OAuth進行谷歌API時,我的所有工作都已經完成,但是當您進行握手時,只有一個access_token,他們不會提供刷新令牌。我需要一個持久的refresh_token,因爲我要向用戶的谷歌日曆提出很多請求。客戶端OAuth使用谷歌日曆api使用React前端和Rails後端
所以我成立了omniauth我的rails服務器上,使流程是這樣的:
用戶點擊與谷歌(客戶端)認證 - >
彈出屏幕轉到後端服務器(localhost:3001/users/auth/google_oauth2
) - >
後端服務器導軌重定向到谷歌的認證 - >
他們與谷歌進行身份驗證和重定向到後端服務器的回調(localhost:3001/users/auth/google_oauth2/callback
) - >
後端服務器進行適當的用戶保存令牌,然後重定向回到客戶端應用程序上localhost:3000
(沒有什麼需要在客戶端完成,只需要保存在我的服務器上,以便將來使用令牌)
但我確實需要要知道認證是成功的,所以我可以在react/redux中調度適當的操作。在redux-auth中,他們檢查popup.location
URI內的access_token。問題是,當我使用這個服務器端彈出的流動,我得到這個討厭的HTTP/HTTPS錯誤:
(原始圖像:http://imgur.com/v5NgIGr)
如果不是重定向返回給客戶端的我只是重定向到一個視圖我的後端服務器,然後我可以在該頁上有一個腳本,只是window.close()
這工作,但似乎對我來說很難受。我在想的另一個潛在的解決方案是嘗試使用api,但我不知道這是否有很好的瀏覽器支持/也似乎hacky。我可以從彈出窗口向另一個窗口(主客戶端應用程序)發送消息,說oauth成功了,所以我的代碼反應並做任何它需要做的事情。
我覺得我只是接近整個流程完全錯誤,或者我錯過了明顯的東西。
我也覺得如果我只是有HTTPS的一切都會工作,因爲以前它是100%客戶端彈出工作得很好,我沒有得到這個SecurityError。我花了一些時間弄清楚如何使用https獲取我的webpack開發服務器,並試圖用rails做同樣的事情(認爲我在rails側做了錯誤的事情),但仍然無法正常工作。也覺得我不應該需要在我的所有開發服務器上強制使用HTTPS才能使其正常工作...
如果有人有任何想法或可以給我一些方向,將不勝感激!
你解決了這個問題嗎? – anoop