我目前正在使用Firebase Realtime数据库开发应用程序,但是我选择省略使用SDK从数据库中检索数据 . 原因是我不希望我的代码与FireBase紧密相关,因为一旦构建应用程序,api本身将转移到基于自定义休息的api .
我根据文档使用REST和Firebase实现了api调用,没有问题 - POST,GET,DELETE等 .
我遇到的问题是,如果我在数据库上启用任何类型的身份验证,根据我需要发送带有请求的文档"access_token",但我不知道从哪里检索它 . firebaseUser.getToken(true)
返回看起来是JWT令牌的内容,如果我将其作为 "access_token"
发送,则无法识别该令牌 . 我得到 401 Unauthorized
我还按照说明设置了一个服务帐户,该帐户似乎生成了一个有效的令牌,但它并没有唯一地标识用户 .
所以我的问题是,任何人都可以指出我如何获得所需的访问令牌,以识别哪个用户正在访问该API?我的Firebase项目支持的登录选项是Google,Facebook和Twitter .
2 回答
如果您要从每种不同的身份验证模式中查找不同的令牌或ID,则应为每个身份验证模式实现差异API:
REST API
成功的请求将由
200 OK
HTTP状态代码指示 . 响应包含要检索的数据:Database REST API接受查询字符串
access_token=<TOKEN>
或 HeadersAuthorization: Bearer <TOKEN>
以使用服务帐户验证请求 .以下示例演示了如何在包含用户名的数据库中使用它 . 您可以使用Firebase项目的标识符替换
[PROJECT_ID]
.Facebook
您应该将
Facebook SDK
添加到您的应用程序并实现LoginButton
和LoginManager
项目,要求提供一些信息作为public_profile电子邮件 . 使用Facebook SDK
非常烦人 . 有关如何添加它的示例代码如下:此外,在Facebook的developers console内,您应该创建一个帐户,使用您的应用程序包名称配置一个新项目,并为您的应用程序的调试和发布版本添加SHA键 . 完成所有这些操作后,您将使用
getAccessToken()
方法从LoginResult
对象成功检索令牌您可以在official documentation中阅读更多相关信息 .
谷歌
谷歌更容易因为它已连接到Firebase,您应该添加到您的gradle
google play services
并添加已经配置到您的应用程序的google services JSON
文件 . 您可以从firebase控制台获取它 .在此之后,您需要使用JSON文件中的id配置
GoogleSignInOptions
项:在此之后,您只需要在应用程序中对
GoogleSignInApi
进行意图并等待onActivityResult
回调:在此之后,您将能够从GoogleSignInAccount项目中检索令牌 . 请记住为应用的调试或发布版本配置不同的SHA密钥,否则Google登录将停止在发布版本中运行 .
你可以在official Firebase documentation中阅读更多相关信息 .
推特
关于twitter,我现在没有帮助你,但我建议你检查一下Twitter developer documentation和firebase Twitter implementation post .
我将尝试编辑这个,当我在家里制作一些pocs检查它是如何工作的 .
关于Firebase令牌
了解Firebase id令牌的另一个好处是,每个用户和应用程序中的连接都是唯一的,允许您检查同一帐户是否尝试同时从不同设备登录,或发送
FCM cloud messages
以在线使用您的应用中的通知 .要检索它,您应该使用API和方法
FirebaseInstanceId.getInstance()
来使用FirebaseInstanceId
对象 . 当用户登录您的应用时,这将为您的用户检索FirebaseInstance唯一ID .您可以使用
idInstance.getToken()
检索其令牌,并在应用程序中随时存储它以检查它并以您希望的方式进行管理 .Firebase documentation about this不是很清楚,所以我建议你使用下一个link,它帮助我在我的应用程序中实现它很多 .
祝你好运,并有一个很好的编码,如果我能帮助你,请随时提出更多的问题!
您可以在服务器中为USER添加表 . 在该表中,添加firebase_token,google_token,fb_token等字段 . 当您逐个注册所有这些服务时,请更新表中的字段以供用户使用 . 通过这种方式,您可以维护users_info以及所有必需的令牌 .