Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

launchWebAuthFlow callback does not run, and the Chrome extension window closes immediately?

I am using chrome.identity.launchWebAuthFlow to retrieve an authentication code from my Rails app which is set up as an OAuth2 provider using the Doorkeeper gem (the Doorkeeper side of things is working).

So I send then request to my server with this method from the Chrome extension:

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

  }

And my server receives the request and redirects to

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

with a 302 found.

But, the Chrome extension immediately closes, and the callback function of launchWebAuthFlow does not run. I know it is not running because I call alert() in the callback (doesn't run), and make another request to my server for the access token (server does not receive the request).

I think part of the problem is that the chrome extension might be closing right when launchWebAuthFlow is called, because the window launchWebAuthFlow opens is a web view of the servers authorization flow, and the extension closes (or is the auth flow just being displayed through the extension?)

For some reason launchWebAuthFlow's default behavior is to close the window according the documentation, but the callback still isn't running.

How can I get the callback function to run, and prevent the chrome extension window from closing?

like image 357
srlrs20020 Avatar asked Nov 11 '17 17:11

srlrs20020


2 Answers

I was running the launchWebAuthFlow in non background script. I moved the auth logic to a background script and it works fine.

like image 156
srlrs20020 Avatar answered Oct 01 '22 01:10

srlrs20020


I too was experiencing almost the same issue. I was trying to launch the webauthflow from my popup.html but the popup.html would close once the auth flow began, aborting the code that would execute upon succesful return of a token.

My suggestion is to instead take care of authentication in options.html. (https://developer.chrome.com/extensions/optionsV2) This will launch a popup modal that stays open even after your auth flow opens, (as opposed to popup.html closing when it loses focus), meaning the rest of your code will execute.

Hope this helps.

like image 37
Patrick Lambe Avatar answered Oct 01 '22 01:10

Patrick Lambe