【发布时间】:2019-05-15 04:51:10
【问题描述】:
在我的 firebase (Angular) 应用程序中,我使用 firebase 身份验证通过用户的 Google 个人资料登录用户。作为此过程的一部分,用户授予我访问其 gmail 帐户的权限(范围 'https://www.googleapis.com/auth/gmail.compose')。
用户以这种方式登录后,我想配置“gapi”google javascript SDK,以便“登录用户”是通过firebase auth登录的用户。这就是我遇到麻烦的地方。
看来我需要像
gapi.client.setToken(userAccessToken)那样为gapisdk 设置客户端令牌,并且需要在初始化gapi 客户端之前设置令牌。然而,尝试这样做似乎不起作用(对gapi.auth2.getAuthInstance().isSignedIn.get()的调用返回false,而它应该返回true)。如果 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