2017-11-11 141 views
0

我正在使用chrome.identity.launchWebAuthFlow從我的Rails應用程序中檢索身份驗證代碼,該應用程序使用Doorkeeper gem(東西的門衛端正在工作)設置爲OAuth2提供程序。launchWebAuthFlow回調不會運行,Chrome擴展窗口立即關閉?

所以我送然後要求到我的服務器從Chrome擴展這個方法:

requestGrant: function(){ 

    chrome.identity.launchWebAuthFlow(
     { 
     'url': authService.grantEndPoint(), 
     'interactive': true 
     }, function(redirect_url){ 

    /* Extract auth code from redirect_url */ 
     var code = authService.extractCode(redirect_url); 
     alert(code); 
     authService.getAccessToken(code); 
    }); //launchWebAuthFlow ends here 

    } 

而我的服務器收到請求並重定向到

https://<my_chrome_extension_name>.chromiumapp.org/oauth2?code=<access_code_generated_by_oauth> 

與發現302。

但是,Chrome擴展會立即關閉,並且launchWebAuthFlow的回調函數不會運行。我知道它沒有運行,因爲我在回調中調用了alert()(不運行),並向我的服務器發送了另一個訪問令牌請求(服務器沒有收到請求)。

我認爲問題的一部分是,當調用launchWebAuthFlow時,Chrome擴展可能會關閉,因爲啓動WebAuthFlow的窗口是服務器授權流的Web視圖,並且擴展關閉(或僅僅是認證流程通過擴展名顯示?)

由於某種原因launchWebAuthFlow的默認行爲是根據文檔關閉窗口,但回調仍然沒有運行。

我怎樣才能讓回調函數運行,並防止鉻擴展窗口關閉?

回答

0

我在非後臺腳本中運行launchWebAuthFlow。我將auth邏輯轉移到後臺腳本,並且工作正常。

1

我也遇到了幾乎相同的問題。我試圖從我的popup.html啓動webauthflow,但是一旦授權流程開始,popup.html就會關閉,並放棄在成功返回令牌時執行的代碼。

我的建議是改爲在options.html中進行身份驗證。 (https://developer.chrome.com/extensions/optionsV2) 這將啓動一個彈出窗口模式,即使在您的認證流程打開後仍然保持打開狀態(與popup失去焦點時的popup.html關閉相反),這意味着您的其他代碼將執行。

希望這會有所幫助。