使用Firebase身份验证无法通过gapi SDK访问Google API

时间:2018-12-13 22:18:24

标签: firebase firebase-authentication gapi

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

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

  1. 似乎我需要像gapi那样为gapi.client.setToken(userAccessToken) sdk设置客户端令牌,并且需要在初始化gapi客户端之前设置令牌。尝试执行此操作似乎无效(对gapi.auth2.getAuthInstance().isSignedIn.get()的调用在应返回false的情况下返回true)。

  2. 如果firebase用户注销并有新用户登录,我也无法找到一种更改“已登录用户”的方法。这是因为,gapi客户端似乎再次需要{ {1}}在初始化客户端之前被调用,我看不到gapi.client.setToken()和已经初始化的gapi客户端的任何方式。

如果我使用gapi客户端自己的re-initializing方法,则可以使gapi客户端正常工作,但是随后要求用户使用(从用户的角度)相同的google登录弹出框两次登录我的应用程序(一个提示来自firebase auth,另一个提示来自gapi客户端。

有人有什么建议/提示吗?有人通过firebase身份登录后,我可以访问他们的gapi.auth2.getAuthInstance().signIn(),但我不知道如何以一种干净的方式以编程方式将其传递给gapi客户端。

理想情况:

  • 在应用程序加载时,userAccessToken客户端也会加载并初始化。
  • 当用户选择登录时,我将能够使用Firebase Auth通过其Google个人资料登录某人,然后获取其访问令牌并将其传递给gapi客户端以进行Google api调用。
    • 如果firebase用户曾经注销,我将清除gapi客户端的api令牌。
    • 如果有新的firebase用户登录,我将重新设置gapi客户端的api令牌。

1 个答案:

答案 0 :(得分:1)

我通过following this S.O. answer提出了一个占位符(即非理想的)解决方案。

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