2016-03-07 75 views
0

我想使用NodeJS將Google Drive API實現到我的Web應用程序,並且當我嘗試通過OAuth獲取令牌時,我很掙扎。如何獲取Drive API的令牌?

我從this guide複製的代碼,並使用節點運行該腳本,並在此行中返回一個錯誤:

var redirectUrl = credentials.installed.redirect_uris[0];

周圍的Googling我發現我可以設置變量作爲http://localhost:8080和設置在Google Developers Console中配置的授權重定向URI中的值相同,並且該錯誤消失,沒問題,它工作正常。現在它需要一個我應該通過使用URL獲得的代碼。

https://accounts.google.com/o/oauth2/auth?access_type=offline&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.metadata.readonly&response_type=code&client_id=CLIENT_ID&redirect_uri=http%3A%2F%2Flocalhost%3A8080

然後,我已經添加了客戶端ID,並輸入與Chrome瀏覽器的URL,然後返回一個連接被拒絕的錯誤。不知道在這裏做什麼,我搜索了我的問題,我找不到答案。通過查看Chrome中的方向欄,我發現有一個叫做代碼的參數,在它之後有隨機數字和字母。就像這樣:

http://localhost:8080/?code=#/r6ntY87F8DAfhsdfadf78F7D765lJu_Vk-5qhc#

如果我添加任何值返回該錯誤的...

Error while trying to retrieve access token { [Error: invalid_request] code: 400 }

任何想法我應該怎麼辦?謝謝。

回答

0

您需要使用此代碼交換令牌。我不確定如何使用nodejs,但在PHP中,我會將詳細信息發佈到令牌交換網址。在JavaScript您發佈陣列將類似於此....

var query = {'code': 'the code sent', 
      'client_id': 'your client id', 
      'client_secret': 'your client secret', 
      'redirect_uri': 'your redirect', 
      'grant_type': 'code' }; 

希望這有助於

+0

是的。這行代碼:var redirectUrl ='http:// localhost:8080'設置該值,然後將其傳遞給JSON,該JSON具有請求令牌所需的信息。仍然沒有結果,謝謝你的迴應。 – CatBrownie

1

是否遵循您指定的網頁上的所有方向,包括所有那些在步驟1中,你創建的控制檯中的憑據併爲其下載JSON?關於創建這些憑據和從中獲得的JSON,有幾點需要注意:

  • 他們給出的步驟與我所經歷的步驟有點不同。它們基本上是正確的,但「轉到憑據」並未將我放在具有頂部「OAuth許可屏幕」和「憑證」選項卡的頁面上。我必須先點擊項目的「Credentials」左側導航欄。

  • 同樣,在「Credentials」頁面上,我的按鈕被標記爲「Create Credentials」,而不是「Add Credentials」。但這是頁面頂部的藍色按鈕。

  • 它是非常重要您選擇「OAuth客戶端ID」,然後選擇「其他」的應用程序類型。這將允許您創建一個OAuth令牌,該令牌通過應用程序運行,而不是通過服務器運行。

  • 看看它告訴你下載的client_secret.json文件。在那裏,你應該看到一個類似於

    "redirect_uris":["urn:ietf:wg:oauth:2.0:oob"," http://localhost "]
    的條目,這是你報告的有問題的行正在尋找的JSON條目。

這爲「urn:IETF:WG:OAuth的:2.0:OOB」是一個神奇的字符串,說你不會爲你的瀏覽器中的身份驗證階段的一部分重定向的任何地方,而是你」將要返回到您將進入應用程序的頁面上的代碼。

我懷疑你所說的「連接被拒絕」錯誤是因爲你使用了「http://localhost:8080/」這個值,所以它試圖將你的瀏覽器重定向到在本地主機上運行的應用程序......並且我懷疑你沒有任何東西在那兒跑。

應用程序會提示您輸入代碼,將代碼轉換爲所需的代幣,然後保存代幣以備將來使用。請參閱示例代碼中的getNewToken()函數,瞭解它在何處以及如何執行所有操作。