2015-05-11 184 views
8

我試圖提供免費試用期我的Chrome擴展,並已按照Chrome documentation如何可以完成此免費試用的時候「的OAuth2不授予或撤銷」。試圖評估Chrome擴展

當我的分機負荷,不過,後臺腳本記錄以下錯誤控制檯:

未選中runtime.lastError在運行identity.getAuthToken:不OAuth2用戶授予或撤銷。

控制檯指向致電chrome.identity.getAuthToken作爲罪魁禍首。下面是我的後臺腳本的相關代碼:

var CWS_LICENSE_API_URL = 'https://www.googleapis.com/chromewebstore/v1.1/userlicenses/'; 

chrome.identity.getAuthToken({ 
    'interactive': false 
}, function(token) { 
    console.log('token', token); 

    var req = new XMLHttpRequest(); 
    req.open('GET', CWS_LICENSE_API_URL + chrome.runtime.id); 
    req.setRequestHeader('Authorization', 'Bearer ' + token); 
    req.onreadystatechange = function() { 
     if (req.readyState == 4) { 
      var license = JSON.parse(req.responseText); 
      console.log('license', license); 
     } 
    }; 
    req.send(); 
}); 

我的清單是像這樣的設置(有些作品略去了):

"manifest_version": 2, 
"key": "kkkkkkkkkkkkkkk", 

"background": { 
    "scripts": [ 
     "background.js" 
    ] 
}, 
"permissions": [ 
    "storage", 
    "identity", 
    "https://www.googleapis.com/" 
], 
"oauth2": { 
    "client_id": "cccccccccc.apps.googleusercontent.com", 
    "scopes": [ 
     "https://www.googleapis.com/auth/chromewebstore.readonly" 
    ] 
} 

這裏就是我試過或證實:

  1. 客戶端ID匹配使用我的擴展程序ID生成的Google開發者控制檯中的值。
  2. Chrome網上應用店API已在Google開發人員控制檯中啓用(它是唯一啓用的API)。
  3. 清單中的關鍵後,我穿上了網上商店的擴展所產生的價值相匹配。
  4. 在啓用交互模式的情況下調用getAuthToken會導致相同的錯誤。
  5. 我將我的代碼與this example進行了比較,沒有什麼東西會跳出來,因爲它們有很大的不同(儘管額外的一雙眼睛確認不會受到傷害)。

在它很重要,我在Mac OS X上使用Chrome 42.0.2311.135(64位)的情況下

什麼原因造成的錯誤,我需要改變,使其什麼任何想法走開,所以我可以查找身份驗證令牌和許可證?

+0

我做你正在做什麼,我想知道,我應該怎麼把作爲谷歌API控制檯參照網址。Chrome網上商店的Api密鑰Api – Kerndog73

+0

@ Kerndog73 - 我不記得必須在Google API控制檯中輸入推薦鏈接。我啓用了Chrome網上應用店API並創建了一個客戶端ID。該客戶端ID的URL對應於我的'manifest.json'文件中的'client_id'。你可能想問一個新的問題,並提供更多的細節和截圖。鏈接到這裏,我會檢查出來。 –

+0

不,我不會擔心。這是可選的,但強烈建議。這對我來說仍然是可選的。 – Kerndog73

回答

10

代碼明智的,需要唯一的變化是使交互模式:

chrome.identity.getAuthToken({ 
    'interactive': true 
}, function(token) { 
    ... 
}); 

也有一對夫婦的PEBCAK問題回事。即:

  1. 交互式認證頁面可能需要幾秒鐘纔會出現。這似乎是一個帶寬問題。這可能是documentation建議在某種用戶交互時觸發授權請求的原因的一部分,而不是在擴展第一次加載時觸發。
  2. 翻轉交互式falsetrue之間和重裝該擴展不是功能性的足夠的測試。緩存getAuthToken的結果。當我撤銷身份驗證,然後刷新甚至刪除並重新添加我的擴展時,同一令牌將繼續返回一段時間。在啓用交互模式的情況下重新啓動Chrome,是我找到這個解決方案的原因。
+0

感謝您的回答。你知道我該如何刪除我最初*給擴展名的權限?現在,即使重新安裝擴展,它也不會問我允許(在我的情況下管理Drive文件)並返回訪問令牌。我希望擴展程序在重新安裝後再次向我詢問權限。我也嘗試刪除champlain'chrome.identity.removeCachedAuthToken( {'token':token},function(){})'但它似乎與權限無關,並沒有幫助。 –

+1

@SergeyIvanov很好的問題,但它可能更好地作爲一個新的問題而不是在評論中問。如果你發佈一個新的問題,儘管在這裏通過一切手段鏈接到它! –

+0

你可以在這裏找到一個問題http://stackoverflow.com/q/30491789/2069858 –