Я использую аутентификацию Firebase с веб-API в сочетании с API-интерфейсами Google для доступа к Google Drive пользователя, поэтому мне нужен маркер доступа пользователя 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...
Есть ли другой способ, которым ямне не хватает токена доступа?