一起使用Google和Google云端硬盘上的操作?

时间:2017-01-27 01:14:54

标签: google-drive-api google-oauth actions-on-google

我是一名业余爱好者学生开发者,他正在玩Google上的炬力,在Google Home上创建一个简单的“文字冒险”游戏。由于谷歌主页将与玩家而不是阅读文本的玩家交谈,我希望这将创建类似于“龙与地下城”角色扮演游戏的体验,计算机将作为“地牢大师”。通过API.AI和Google提供的自然语言协助,它看起来非常合适,因为玩家可以“自然地”做出回应。 Here's an example of an Amazon Alexa skill that does essentially what I'm going for.

但是,每次启动游戏时,它总是一款新游戏。我想在用户的Google云端硬盘上托管一个JSON文件中存储一个用户以前状态的存档游戏 - 因为我只是一个学生为了好玩这样做,我实际上没有官方网站或任何其他东西免费的Heroku服务器我正在运行该应用程序,使存储保存在我的终端几乎是不可能的。

我已经走过了Google Drive REST quickstart for Node.js,我已经在控制台上工作了。唯一的问题是快速启动,用户必须点击链接授权应用程序读取他们的Google云端硬盘帐户中的内容,我不确定我如何能够“点击链接”并回馈通过Google Home上的语音访问令牌。

有没有办法通过Google云端硬盘实现这一目标?或者是否有更好的方法在会话之间提供持久数据?我通常不会在网站开发方面工作,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

坏消息是,您无法让用户使用其网络浏览器授权您的应用访问其云端硬盘。

好消息是你只需要这样做一次。当您的应用程序请求authoirsation时,它应指定" offline",这将导致您获得刷新令牌。您应该将其保存在用户数据库中的某个位置。每当您需要访问用户的云端硬盘时,您都可以使用已保存的刷新令牌来请求访问令牌,并且您可以继续使用。

答案 1 :(得分:1)

你有一些问题需要在这里解决,虽然它们看似相关,但它们并不像你希望的那样相关:

  1. 您需要获得授权才能访问用户的云端硬盘空间
  2. 您需要验证用户的主页(因此您知道此人已经回来了)
  3. 您必须连接这两种关系 - 这样您才能知道用于与您通话的家庭设备的驱动器空间
  4. 您已找到(1)的答案,如上所述,您需要使用浏览器授权您访问其云端硬盘。然后,您将存储刷新令牌,并且将来可以访问它。

    但这只是问题的一部分。主页不允许您直接访问用户的Google帐户,因此您必须管理自己的帐户机制并将其绑定到主页。这里有一些解决方案:

    • Home在发送到您的webhook的JSON中提供anonymous user identity。如果您正在使用Actions API库,则可以使用getUser().user_id访问此文件,或者在JSON的data.user.user_id字段中访问此文件。虽然这与浏览器cookie类似,但它只存储用户ID,无法存储其他数据。也没有“本地存储”的概念。从好的方面来说,这个ID在不同的设备上是一致的。
    • 您可以请求user information,例如他们的姓名和地址。但它没有任何独特或帐户信息,因此这可能对您没用。
    • 您可以实施OAuth2 服务器并执行account linking。请注意,这是您需要使用Google云端硬盘的其他方 - 您将提供访问权限并刷新令牌以验证和授权访问您的帐户,Google Home设备会将这些内容发送给您令牌返回给您,以便您可以确定用户是谁。您实际上不需要存储帐户信息 - 您可以使用JSON Web令牌(JWT)或其他方法提供令牌信息,并让它们以安全的方式存储帐户信息。用户将使用Google Home应用程序作为一次性活动实际登录您的服务。

    为了处理(3),您可能会认为(1)允许您获取令牌,而(2)的OAuth解决方案要求您分发令牌。两者可以合并吗?嗯...可能,但它并不那么简单。您不能只将Google OAuth2端点提供给主页 - 它们会明确阻止该端点,您需要控制OAuth2端点。但是,您可以构建代理端点 - 但我没有探讨这样做的安全隐患。

    我认为你走在正确的轨道上 - 使用Drive是存储用户信息的好地方。使用Home的帐户链接为您提供了一个他们必须来到您的网站进行身份验证和授权的地方,您可以使用它来为他们的云端硬盘做同样的事情。