我正在使用chrome.identity.launchWebAuthFlow从我的Rails应用程序检索身份验证代码,该应用程序使用Doorkeeper gem(设置为OAuth2的提供者)设置为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()(不运行),并向服务器发出另一个访问 token 请求(服务器未收到该请求)。

我认为问题的部分原因是,在调用launchWebAuthFlow时,chrome扩展名可能正在关闭,因为launchWebAuthFlow打开的窗口是服务器授权流的Web View ,并且扩展名关闭了(或者是仅通过扩大?)

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

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

最佳答案

我在非后台脚本中运行launchWebAuthFlow。我将身份验证逻辑移至后台脚本,并且工作正常。

09-27 19:22