2016-03-07 50 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()函数,了解它在何处以及如何执行所有操作。