launchWebAuthFlow回调未运行,Chrome扩展程序窗口立即关闭?

时间:2017-11-11 17:04:25

标签: javascript google-chrome-extension

我正在使用chrome.identity.launchWebAuthFlow从我的Rails应用程序中检索身份验证代码,该应用程序使用Doorkeeper gem设置为OAuth2提供程序(门禁端的工作正常)。

所以我通过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扩展可能正在关闭,因为窗口launchWebAuthFlow打开是服务器授权流的Web视图,并且扩展关闭(或者是auth流程正好通过扩展名显示?)

出于某种原因,launchWebAuthFlow的默认行为是根据文档关闭窗口,但回调仍然没有运行。

如何让回调函数运行,并阻止chrome扩展窗口关闭?

2 个答案:

答案 0 :(得分:2)

我也遇到了几乎相同的问题。我试图从我的popup.html启动webauthflow,但是一旦auth流程开始,popup.html就会关闭,中止在成功返回令牌时执行的代码。

我的建议是在options.html中处理身份验证。 (https://developer.chrome.com/extensions/optionsV2) 这将启动一个弹出窗口模式,即使在您的auth流程打开后也会保持打开状态(与popup.html失去焦点时关闭),这意味着其余代码将执行。

希望这有帮助。

答案 1 :(得分:1)

我在非后台脚本中运行launchWebAuthFlow。我将auth逻辑移动到后台脚本,它工作正常。