首页 > 解决方案 > Twitter Firebase AuthUI 无法在 Android 上运行

问题描述

Twitter 登录在我的 android 项目上不再起作用,我发现这是因为我在 Google 云中限制了我的 API 密钥。默认情况下,twitter 登录使用 https 请求https://<project_name>.firebaseapp.com/__/auth/handler....apiKey=...&providerId=twitter.com&sessionId etc,其中 apiKey 是我的 google-services.json 中的 API 密钥。鉴于我已将 API 密钥限制为我的 Android 应用程序包名称,因此 Twitter 登录的 https 请求会返回错误。如果我手动编辑 url 并放置浏览器 API 密钥,它可以正常工作,但这显然不是生产的实际解决方案。

有没有办法告诉 AuthUI.IdpConfig.TwitterBuilder() 使用特定的 API 密钥,以便我可以传递默认的浏览器 API 密钥。

我尝试手动编辑 google-services.json 以添加浏览器 API 密钥,这解决了 Twitter 登录问题并中断了对服务器的其他调用。

标签: androidfirebase-authenticationtwitter-oauthfirebaseui

解决方案


一种解决方法是拥有一个额外的密钥,您的最终用户可以拥有您信任的人,并通过查询参数进行检查。常量 BrowserAPIKey = 'realKeyhere';

  1. 创建一个唯一键并将其作为常量保存在调用 Twitter 登录的函数中。
  2. 在 key 变量下调用任何 URL 并附加一个查询参数,例如 firebaseauth.com/twitter?key=123,然后通过调用 req.body.key 提取密钥,因此如果您使用名为 key 的参数请求 API。即,将其保存在另一个 const 中,例如 const enterKey = req.body.key。如果一切正常,我们预计 123 将成为解决的关键
  3. 检查受信任的客户端是否正确获取密钥并根据结果释放浏览器 API 密钥:如果输入密钥 = 123 // 使用真实浏览器密钥调用 Twitter 登录 api https://<project_name>.firebaseapp.com/__/auth/handler... .apiKey=BrowserAPIKey...&providerId=twitter.com&sessionId

假设:

  1. 此 API 通过一个名为 browserkey 的参数接受浏览器密钥,并以这种方式准确拼写
  2. 上述第 3 步中的 BrowserAPIKey 包含客户端登录时需要使用的实际密钥

推荐阅读