我正在将Firebase身份验证与Web API结合使用,并将Google API与Google API结合使用,以访问用户的Google云端硬盘,因此我需要Firebase用户的访问令牌(通过GoogleAuthProvider
)将其移交给Google API。我是从signInWithPopup
的结果中删除它的:
const result = await firebase.auth().signInWithPopup(provider);
const { credential } = result;
if (credential === null) return undefined;
if (!hasOwnProperty(credential, "accessToken")) return undefined;
const accessToken = checkString(credential.accessToken);
这很好用,但不幸的是,如果用户已经登录,它仍然会显示弹出窗口,并让用户选择是要使用当前帐户还是选择其他帐户,这是一个不幸的副作用。我只想获取访问令牌,而不要求他们通过该选择器。
我尝试过
const result = user.reauthenticateWithPopup(provider);
其中user
是当前的Firebase用户,但仍显示选择器弹出窗口。
另一种方法是:
const cred = firebase.auth.GoogleAuthProvider.credential(await user.getIdToken());
const result = await user.reauthenticateAndRetrieveDataWithCredential(cred);
这个奇怪的失败并显示400和消息:
Invalid id_token in IdP response: eyJhbGci...
我还有其他方法无法获得访问令牌吗?