【问题标题】:Trouble using Firebase Auth to access google API via gapi SDK使用 Firebase Auth 通过 gapi SDK 访问 google API 时遇到问题
【发布时间】:2019-05-15 04:51:10
【问题描述】:

在我的 firebase (Angular) 应用程序中,我使用 firebase 身份验证通过用户的 Google 个人资料登录用户。作为此过程的一部分,用户授予我访问其 gmail 帐户的权限(范围 'https://www.googleapis.com/auth/gmail.compose')。

用户以这种方式登录后,我想配置“gapi”google javascript SDK,以便“登录用户”是通过firebase auth登录的用户。这就是我遇到麻烦的地方。

  1. 看来我需要像gapi.client.setToken(userAccessToken) 那样为gapi sdk 设置客户端令牌,并且需要在初始化gapi 客户端之前设置令牌。然而,尝试这样做似乎不起作用(对 gapi.auth2.getAuthInstance().isSignedIn.get() 的调用返回 false,而它应该返回 true)。

  2. 如果 firebase 用户注销并有新用户登录,我也无法找到更改“已登录用户”的方法。这是因为,gapi 客户端似乎需要 @ 987654328@在客户端初始化之前被调用,我看不到re-initializing和已经初始化的gapi客户端的任何方式。

如果我使用 gapi 客户端自己的 gapi.auth2.getAuthInstance().signIn() 方法,我可以让 gapi 客户端正常工作,但随后会要求用户使用(从用户的角度)相同的谷歌登录弹出框(一个提示)登录我的应用两次来自 firebase auth,另一个来自 gapi 客户端)。

有没有人有任何建议/提示?有人通过 firebase auth 登录后,我可以访问他们的 userAccessToken,但我只是不知道如何以一种干净的方式以编程方式将其传递给 gapi 客户端。

理想情况下:

  • 在应用程序加载时,gapi 客户端也会加载和初始化。
  • 当用户选择登录时,我可以使用 Firebase 身份验证通过他们的 google 个人资料登录某人,然后获取他们的访问令牌并将其传递给 gapi 客户端以进行 google api 调用。
    • 如果 firebase 用户退出,我会清除 gapi 客户端的 api 令牌。
    • 如果有新的 firebase 用户登录,我会重新设置 gapi 客户端的 api 令牌。

【问题讨论】:

  • 你在这方面有什么进展吗?我有完全一样的问题。我的应用允许用户通过 Firebase Auth 登录。该应用程序包含一个日历功能,需要 gapi 客户端来检索事件并将事件创建到通用 Google 日历。由于用户已经通过 Firebase 登录,并且日历通过应用程序本身是通用的,我想将访问令牌传递给 gapi 客户端。
  • @ElFred 我还没有弄清楚如何实现我想要的解决方案,但我确实通过关注this S.O. answer 提出了一些可以接受的方法。基本上,GAPI 客户端似乎不允许您向其传递访问令牌,但 Firebase 身份验证客户端 确实 允许您向其传递访问令牌。因此,您无需使用 firebase sdk 处理身份验证并将令牌传递给 GAPI 客户端,而是需要执行相反的操作并使用 GAPI 客户端处理身份验证,然后将令牌传递给 firebase SDK。

标签: firebase firebase-authentication google-api-js-client


【解决方案1】:

following this S.O. answer 为这个问题提供了一个占位符(即非理想的)解决方案。

简而言之,GAPI 客户端似乎不允许您手动向其传递访问令牌,但 Firebase 身份验证客户端确实允许您手动向其传递访问令牌。因此,您不需要使用 firebase sdk 处理身份验证并将令牌传递给 GAPI 客户端,而是需要执行相反的操作并使用 GAPI 客户端处理身份验证,然后将令牌传递给 firebase SDK。

【讨论】:

  • 这里的问题是我希望能够使用应用程序帐户的日历(它有自己的“用户”帐户。如果用户通过 gapi 客户端登录,那么她/他将看到他们自己的日历,而不是应用程序/普通日历。
  • @ElFred 是的,很遗憾,我没有更好的答案。似乎您所描述的将是一个非常常见的用例。也许您可以复制 GAPI 客户端并使用两个单独的访问令牌将其实例化两次?似乎必须有一种方法可以同时与多个用户一起使用 GAPI 客户端......
  • 该应用程序已经投入使用,并且日历要求是最近才添加的,因此我想坚持使用 Firebase 身份验证作为主要登录名。它确实必须是一个非常常见的用例,但似乎不可能找到任何关于此的好信息。如果我发现任何有趣的东西,我会继续寻找并更新这个主题。感谢您的宝贵时间!
  • 您对此有什么解决办法吗?我认为处理多个第三方身份验证的唯一方法是在服务器上进行。计划创建一个无服务器功能来处理 Oauth 帐户链接
  • 查看 gapi 客户端的这种方法,似乎应该可以传递一个用于 gapi 请求的 firebase 令牌:github.com/google/google-api-javascript-client/blob/master/docs/…
猜你喜欢
  • 2020-05-22
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
相关资源
最近更新 更多