在助手应用程序的Firebase函数中获取Node.js中的Google用户标识

我正在开始使用Google云端平台。

我正在开发一个Android应用程序,收集信息并将其存储在Firebase应用程序中。 这个想法是,谷歌助理function可以查询这些信息并将其读回,例如

OK Google,和Simons App交谈,告诉我上次XYZ完成的时间

但是,我得到的问题是让这个多用户。

我有Android应用程序收集数据并将其放入云中。 我正在使用FirebaseUser并在Android应用程序中使用getUid()来获取唯一的id,它是一个28个字符的string,如uVHkia8RRgWD8GGPVvW4AUDUK2

我已经在Google上设置了Actions,通过Web Fulfillment将它吸引到API.AI中,并获得了Node.js在Firebase函数中的工作。

不幸的是,我回来的UserID看起来更像: HTge48H0CF2FC5jJQCigFBc-UCQ

问题是这个UserID和我从Filebase User得到的UserUID不一样。

我在用着

 let ApiAiApp = require('actions-on-google').ApiAiApp; const app = new ApiAiApp({request: request, response: response}); 

 const userId = app.getUser().userId; 

我错过了什么? 我看到OAuth2,帐户链接等参考。我不完全确定在这一点上做什么。 我现在需要做的就是从FirebaseUser.getUID()获取User UID ,以便在Firebase数据库中查看数据。

我认为其余的应该是直截了当的。

从助理链接到Firebase有大量的文档,但在实际身份validation方面很less。 到目前为止,我还没有设置stream程,如授权码stream程,隐式stream程,或者根据API.AI和Fulfillment选项设置用户名/密码。 坦率地说,林不知道什么需要去哪里在这一点上。

app.getUser().userId提供的用户被devise为持久匿名标识符 。 它大致相当于一个在Web服务器中设置的cookie–您可以使用它来确定您之前是否看过这个用户,以及他们在您的Action中做了什么,但是它并没有inheritance地与任何外部帐户。

不幸的是,您现在最好的解决scheme是使用账户链接 ,这需要您设置一个OAuth2服务器。 作为此设置的一部分,您将需要创build三个组件:

  1. 您的服务的login网页。 您会将此页面的url作为帐户关联的一部分提供给Google。 当用户访问您的操作,并且您的操作表明他们需要login时,他们将被redirect到他们的移动设备上的此URL。 在此页面上,用户将login – login后,您现在知道他们的Firebase ID,并将为该用户创build一个授权码 。 然后,您将redirect到不同的URL,并将此身份validation代码(以及其他一些信息)作为parameter passing。

  2. 令牌交换端点。 Google会使用上面的authentication码调用这个URL。 您将validation此代码,确定用户是谁,并发送一个唯一的访问令牌 。 (您还将发送一个刷新令牌 ,Google将以相同方式使用刷新令牌来获取更新的访问令牌。)

  3. webhook中的身份validation令牌处理程序。 当API.AI调用您的webhook时,它将把访问令牌作为请求中的一个字段。 您可以使用此访问令牌来获取用户的Firebase ID。

需要注意的是,authentication代码,访问令牌和刷新令牌需要有一些方法来将这些代码/标记映射到Firebase标识。 有两个好方法可以做到这一点:

  1. 代码/标记可以是JSON Web令牌(JWT)。 这需要Firebase ID以及您希望保留的有关用户的其他信息,并将其放入标准格式。 然后创build一个encryption签名,以确保它没有被篡改,并以标准格式进行编码。 当您需要从JWT中确定ID时,可以对其进行解码,validation签名是否有效,然后读取该值。

  2. 生成一个随机string,并将其存储在您的数据库中的Firebase ID。 当你得到令牌时,你可以在你的数据库中查找这个string被分配给的ID。

有许多关于OAuth实施的详细信息,以及这些步骤中的每一个。 有关更多详细信息,请参阅https://developers.google.com/actions/identity/oauth2-code-flow