2015-07-03 124 views
3

構建Gmail的Chrome擴展,嘗試使用Chrome身份驗證訪問gmail API,其中包括this StackOverflow postthe Gmail API docs。我成功地接收令牌chrome.identity.getAuthToken({ 'interactive': true }, function(token) {}但是當我插上令牌到請求的URL,我得到以下401錯誤響應(代碼如下)使用Chrome身份驗證訪問Chrome擴展中的Gmail api

錯誤響應

{ 
    "error": { 
    "errors": [ 
     { 
     "domain": "global", 
     "reason": "required", 
     "message": "Login Required", 
     "locationType": "header", 
     "location": "Authorization" 
     } 
    ], 
    "code": 401, 
    "message": "Login Required" 
    } 
} 

我的代碼:
背景.js文件

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { 
    if (changeInfo.status == 'complete') { 
    chrome.identity.getAuthToken({ 'interactive': true }, function(token) { 
     thisToken = token 
     chrome.runtime.onMessage.addListener(
     function(request,sender,sendResponse){ 
      var gapiRequestUrlAndToken = "https://www.googleapis.com/gmail/v1/users/mail%40gmail.com/threads?key={" + thisToken + "}" 

      var makeGetRequest = function (gapiRequestURL) 
      { 
       var xmlHttp = new XMLHttpRequest(); 
       xmlHttp.open("GET", gapiRequestURL, false); 
       xmlHttp.send(null); 
       return xmlHttp.responseText; 
      } 

      makeGetRequest(gapiRequestUrlAndToken); 
     } 
    ); 
    }); 
    } 
}) 

manifest.json的

{ 
    "manifest_version": 2, 
    "key": "<key>", 
    "name": "exampleName", 
    "description": "Description", 
    "version": "0.0.1.7", 
    "default locale": "en", 
    "icons": { "128": "imgs/pledge_pin.png"}, 
    "content_scripts" : [ 
    { 
     "matches": ["*://mail.google.com/mail/*"], 
     "js": ["js/jquery.js", "js/compose.js", "bower_components/jqnotifybar/jquery.notifyBar.js"], 
     "css": ["css/stylesheet.css", "bower_components/jqnotifybar/css/jquery.notifyBar.css"] 
    } 
    ], 
    "background": { 
    "scripts": ["scripts/background.js"] 
    }, 
    "permissions": [ 
    "identity" 
    ], 
    "oauth2": { 
    "client_id": "<client id>", 
    "scopes": ["https://www.googleapis.com/auth/gmail.modify"] 
    } 
} 

我懷疑這事做的事實,我想使用Chrome驗證Gmail的API,但是我看過其他職位都使我相信這是一個切實可行的選項。

如果我的代碼沒有給出它,我是一個新手,所以任何幫助是最受歡迎的,我非常感謝你的時間。

+1

發表您的清單。 – Xan

+0

@Xan通過編輯添加。 –

回答

2

key是用於通用應用程序的祕密。對於用戶特定的令牌,您需要使用access_token。並且標記不應該被包裹在{}中。如果mail%40gmail.com是您在URL中使用的實際值,則不起作用。它可能需要是已通過身份驗證的用戶的電子郵件地址或me

因此改變:

"https://www.googleapis.com/gmail/v1/users/mail%40gmail.com/threads?key={" + thisToken + "}" 

要這樣:

"https://www.googleapis.com/gmail/v1/users/me/threads?access_token=" + thisToken 
+0

令人驚歎!神聖的抽菸@abraham,非常感謝你。當我的簡單鍵vs access_token保存了一天的時候,我只是在把所有的東西都分開,嘗試一種完全不同的方法。非常感謝你幫助我從我的新手程序員生活中減少了壓力的時間:-) –

+0

@DanKlos很高興聽到你讓它工作。 – abraham