在我的Firebase(Angular)应用中,我正在使用Firebase身份验证通过用户的Google个人资料登录。在此过程中,用户授予我访问其gmail帐户(范围'https://www.googleapis.com/auth/gmail.compose'
)的权限。
用户以这种方式登录后,我要配置“ gapi” google javascript SDK,以便“登录用户”是通过firebase auth登录的用户。这是我遇到麻烦的地方。
似乎我需要像gapi
那样为gapi.client.setToken(userAccessToken)
sdk设置客户端令牌,并且需要在初始化gapi客户端之前设置令牌。尝试执行此操作似乎无效(对gapi.auth2.getAuthInstance().isSignedIn.get()
的调用在应返回false
的情况下返回true
)。
如果firebase用户注销并有新用户登录,我也无法找到一种更改“已登录用户”的方法。这是因为,gapi客户端似乎再次需要{ {1}}在初始化客户端之前被调用,我看不到gapi.client.setToken()
和已经初始化的gapi客户端的任何方式。
如果我使用gapi客户端自己的re-initializing
方法,则可以使gapi客户端正常工作,但是随后要求用户使用(从用户的角度)相同的google登录弹出框两次登录我的应用程序(一个提示来自firebase auth,另一个提示来自gapi客户端。
有人有什么建议/提示吗?有人通过firebase身份登录后,我可以访问他们的gapi.auth2.getAuthInstance().signIn()
,但我不知道如何以一种干净的方式以编程方式将其传递给gapi客户端。
userAccessToken
客户端也会加载并初始化。答案 0 :(得分:1)
我通过following this S.O. answer提出了一个占位符(即非理想的)解决方案。
简而言之,GAPI客户端似乎不允许您手动将访问令牌传递给它,但是firebase auth客户端确实允许您将访问令牌手动传递给它。因此,您需要执行反向操作并使用GAPI客户端处理身份验证,然后将令牌传递给firebase SDK,而不是使用firebase sdk处理身份验证并将令牌传递给GAPI客户端。