首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Firebase函数中为辅助应用程序获取谷歌用户ID

在Firebase函数中为辅助应用程序获取谷歌用户ID
EN

Stack Overflow用户
提问于 2017-09-01 18:00:07
回答 1查看 1.5K关注 0票数 5

我开始使用Google平台了。

我正在开发一个Android应用程序,它将收集信息并将其存储在Firebase应用程序中。其思想是Google助手函数可以查询这些信息并将其读回-例如

好的,谷歌,跟Simons应用说,告诉我上一次XYZ是什么时候做的

然而,我遇到的问题是如何使这个成为多用户。

我已经让Android应用程序收集数据并将其放入云中。我正在使用FirebaseUser和安卓应用程序中的getUid()来获得一个独特的id,这是一个像uVHkia8RRgWD8GGPVvW4AUDUK2这样的28个字符串。

我在Google上设置了操作,让它通过网络实现连接到API.AI,并让Node.js在firebase函数中工作。

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

问题是,这个UserID与我从Filebase用户获得的UserUID不一样。

我在用

代码语言:javascript
复制
let ApiAiApp = require('actions-on-google').ApiAiApp;
const app = new ApiAiApp({request: request, response: response});

代码语言:javascript
复制
const userId = app.getUser().userId;

我遗漏了什么?我看到了对OAuth2、帐户链接等的引用。我不完全确定在这一点上该做什么。现在我所需要做的就是像从FirebaseUser.getUID()获得FirebaseUser.getUID()一样,获取FirebaseUser.getUID(),以便在Firebase数据库中查找数据。

我觉得剩下的应该是笔直的。

关于从助手链接到Firebase有大量的文档,但是关于实际身份验证的文档很少。到目前为止,我还没有设置像授权代码流、隐式流之类的流,也没有针对API.AI和实现选项设置用户名/密码。坦白地说,我现在不确定该去哪里。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-02 09:45:19

app.getUser().userId提供的用户被设计为持久匿名标识符。它大致相当于在web服务器上设置的cookie --您可以使用它来确定您以前是否见过这个用户,以及他们在您的Action中做了什么,但它与任何外部帐户没有很大关系。

不幸的是,目前您拥有的最佳解决方案是使用帐户连接,这需要您设置一个OAuth2服务器。作为此设置的一部分,您需要创建三个组件:

  1. 您的服务的登录网页。您将提供此页面的URL到Google作为帐户链接的一部分。当用户访问您的Action,并且您的操作指示他们需要登录时,他们将被重定向到移动设备上的这个URL。在这个页面上,用户将登录-一旦登录,您现在知道他们的Firebase ID,并将为该用户创建一个auth代码。然后将它们重定向回一个不同的URL,并将这个auth代码(以及一些其他信息)作为参数传递。
  2. 令牌交换端点。Google将使用上面的auth代码调用这个URL。您将验证此代码,确定用户是谁,并发回唯一的访问令牌。(您还将发送一个刷新令牌,Google将以相同的方式使用该令牌获取更新的访问令牌。)
  3. 网络钩子中的一个令牌处理程序。当API.AI调用web钩子时,它将将访问令牌作为请求中的字段之一。您可以使用此访问令牌为用户获取Firebase ID。

对于auth代码、访问令牌和刷新令牌,要注意的一点是,您需要有某种方法从这些代码/令牌映射到Firebase ID。

  1. 代码/令牌可以是JSON令牌(JWT)。这将获取Firebase ID和其他您希望保留的有关用户的信息,并将其以标准格式保存。然后创建一个密码签名,以确保它没有被篡改,并以标准格式对其进行编码。当您需要从JWT中确定ID时,可以对其进行解码,验证签名是否有效,并读取该值。
  2. 生成一个随机字符串,并根据Firebase ID将其存储在数据库中。当您获得令牌时,您可以在数据库中查找分配给该字符串的ID。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46005716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档