7

Przepraszam za kolejne prawdopodobnie pytanie typu noob, zwykle nie poddam się, dopóki sam nie znajdę rozwiązania, ale ten ma mnie na 3 dni i nadszedł czas, aby przyznać, że jestem zatrzymany ...Uruchomienie nowej wersji ChromeWebAuthFlow otwiera tylko pustą stronę oddzwonienia

Próbuję authenicate rozszerzenie Chrome, aby używać danych użytkownika PushBullet poprzez OAuth2:

background.js

var client_id = '<32 DIGIT CLIENT ID>'; 
var redirectUri = "chrome-extension://lgekckejcpodobwpelekldnhcbenimbe/oauth2"; 
var auth_url = "https://www.pushbullet.com/authorize?client_id=" + client_id + "&redirect_uri=" + encodeURIComponent(redirectUri) + "&response_type=token"; 

chrome.identity.launchWebAuthFlow({'url':auth_url,'interactive':true}, function(redirect_url){ 
    console.log(redirect_url) 
}); 

manifest.json:

"permissions": [ 
    "identity", 
    "*://*.google.com/*", 
    "*://*.pushbullet.com/*", 
    "storage" 
    ], 
    "web_accessible_resources": [ 
    "/oauth2/*" 

Kiedy załadować rozszerzenie:

  1. Pushbullet upoważnienie pop-up otwiera się i prosi, aby wyrazić zgodę, aby moje rozszerzenie (OK)
  2. zgadzam (OK)
  3. The Okno Pushbullet zamyka , a nowa pusta strona otwiera adres URL adresu URL , w którym system Windows to identyfikator zwrotny URI z tokenem:

chrome-extension: //lgekckejcpodobwpelekldnhcbenimbe/oauth2#access_token=o.zrrWrDozxMu6kftrMHb89siYJQhRVcoL

Nie spodziewałem się pusta strona, aby otworzyć lecz mający launchWebAuthFlow schwytany URI i zostały napisane w konsoli log jak zakodowany w funkcji wywołania zwrotnego ... ale wydaje się czekać ...

Jedyną opcją jest teraz zamknąć tę pustą stronę tylko zobaczyć co następuje logowanie:

Niezaznaczony plik runtime.lastError podczas działania identity.launchWebAuthFlow: Użytkownik nie zatwierdził dostępu.

Najwyraźniej brakuje mi czegoś istotnego ... czy potrzebuję dodatkowego kodu "gdzieś", aby uzyskać identyfikator URI wywołania zwrotnego w moim pliku background.js?

Dzięki, naprawdę doceń pomoc.

ShadowHunter

Odpowiedz

11

Jesteś niezrozumienia identity API.

Nie można używać z niestandardowym adresem URL wywołania zwrotnego. API spodziewa się użyć adresu URL formularza

https://<app-id>.chromiumapp.org/* 

które można uzyskać z wywołaniem chrome.identity.getRedirectURL(path)

Kiedy operator przekierowania do adresu URL pasującego do wzorca https://<app-id>.chromiumapp.org/*, okno zostanie zamknięte, a ostateczny URL przekierowania zostanie przekazany do funkcji zwrotnej.

Wynika to z faktu, że wielu dostawców OAuth nie akceptuje adresu URL chrome-extension:// jako prawidłowego.

Jeśli tak - świetnie, ale musisz użyć własnej biblioteki OAuth (i magazynu tokenów, która jest gorsza). chrome.identity działa tylko z powyższymi.

Należy zauważyć, że żądanie sieciowe nie jest faktycznie wysyłane na adres chromiumapp.org w tym strumieniu - jest to "wirtualny" adres przechwycony przez interfejs API.

+0

Witam Xan, dziękuję tak, tak ... Zmiana URL zwrotna za sugestię zrobił. Działa teraz idealnie, – ShadowHunter

7

Szybkie eleboration na rozwiązania dla nikogo innego, że może walczyć z nim:

Jest to kod pracy:

background.js

var client_id = '<CLIENT_ID>'; 
var redirectUri = chrome.identity.getRedirectURL("oauth2");  
var auth_url = "https://www.pushbullet.com/authorize?client_id=" + client_id + "&redirect_uri=" + redirectUri + "&response_type=token"; 

    chrome.identity.launchWebAuthFlow({'url':auth_url,'interactive':true}, function(redirect_url){ 
     console.log(redirect_url) 
    }); 

manifest.js

"permissions": [ 
    "identity", 
    "*://*.google.com/*", 
    "*://*.pushbullet.com/*", 
    "storage" 
    ],  

Jeszcze raz, dziękuję Xan i życzę udanego dnia.

Z poważaniem,

ShadowHunter

+0

Czy naprawdę chcesz ujawnić ten identyfikator klienta? Jeśli nie, edytuj, aby zastąpić identyfikator czymś oczywistym i wygeneruj ponownie identyfikator. Możesz także oznaczyć swoją odpowiedź na uwagę moderatora prosząc o wyczyszczenie historii edycji. – Xan

+0

Cześć Xan, nie martw się, to był fałszywy ... ale masz rację, edytuję go, żeby było wyraźniej ... dzięki za wskazanie tego – ShadowHunter