2011-09-30 73 views
25

我已經使用Twitter和Facebook進行了OAuth身份驗證。目前,對於這些網站中的每個網站,我的服務器都會將用戶重定向到指定的網址(例如,使用Twitter的http://api.twitter.com/oauth/authorize),然後通過回叫網址接收驗證參數。如何通過打開新窗口來執行OAuth請求,而不是從當前頁面重定向用戶?

但通過這種方式,用戶被重定向到我的頁面(到Facebook或Twitter),並且只有在輸入正確的用戶名密碼後纔會返回。這就像用戶嘗試推文時http://techcrunch.com那樣。

我記得在某些網站中,我已經看到我們可以不通過重定向用戶連接,而是打開彈出窗口供用戶輸入憑據。驗證完成後,彈出窗口關閉,主頁面刷新新內容。

這可能是一個非常簡單的任務與JavaScript,但我仍然無法弄清楚。我可以在彈出窗口中打開認證URL,但是如何獲得結果&更新主頁面?

回答

43

假設你在一個彈出使用window.open()打開驗證網址,您可以通過使用訪問父窗口:

window.opener 

,並重裝父窗口(從彈出)使用方法:

window.opener.location.reload(); 

此代碼應該在您設置爲成功的oauth授權回調url的url上提供。

一般來說,流動應該是:

  • 打開一個彈出一個授權頁面(在twitter.com上例如)全成Twitter的授權後
  • 重定向用戶的URL被你給(它得到了非常相同的彈出)
  • 開門紅窗口被重新加載(通過window.opener.location.reload()
  • 關閉彈出本身(使用JavaScript是你想要的)
開通
+0

你的意思是我把JavaScript放在彈出窗口中來做到這一點? –

+6

是的,在彈出窗口中,這是一個成功回調oauth授權的頁面。所以流程是:你打開一個帶有授權頁面的彈出窗口(例如在twitter.com上),在成功授權twitter將用戶重定向到由你給出的URL(它在相同的彈出窗口中打開)後,回調頁面,你從我的答案中放了一個javascript,* opener *窗口被重新加載,你也可以簡單地使用javascript關閉彈出窗口。 – WTK

+0

我會試一試吧 –

相關問題