Токен идентификатора Firebase имеет неверное утверждение "audi" (аудитория). Ожидал XXX, а получил XXX

Я создаю приложение с помощью React Native и nodeJS. У меня уже есть система авторизации. Теперь я пытаюсь реализовать вход в Google. Так :

  1. Создал приложение Google в Firebase.
  2. Сгенерирован файл .keystore и получен ключ SHA1.
  3. Обновлен build.gradle для установки SDK на клиенте.
  4. Поместил файл в клиент и файл службы Google в свое приложение Node.js.
  5. Реализован код в React Native и Node.js.
  6. Получен токен от клиента.
  7. Обнаружена ошибка при тестировании с помощью Postman.

Я получаю эту проверку ошибок на Postman:

Сообщение: «Токен идентификатора Firebase содержит неверное утверждение «audi» (аудитория). Ожидал "так-муску", но получил «XXXX-ruib6t1s7lochabens3f3ep67pa411nc.apps.googleusercontent.com». Убедитесь, что токен идентификатора взят из того же проекта Firebase, что и учетная запись службы, используемая для аутентификации этого SDK. Видеть https://firebase.google.com/docs/auth/admin/verify-id-tokens для подробную информацию о том, как получить идентификационный токен».

Я получаю токен от своего клиента:

  GoogleSignin.configure({
    webClientId: 'XXXXX-ruib6t1s7lochabens3f3ep67pa411nc.apps.googleusercontent.com',
    androidClientId: 'XXXXX-fvv7nndd0q53hvoht9cldt82jm5a9306.apps.googleusercontent.com',
    scopes: ['profile', 'email']
  });


  const signIn = async () => {
    try {
      await GoogleSignin.hasPlayServices();
      const userInfo = await GoogleSignin.signIn();
      const idToken = userInfo.idToken;
      console.info('ID Token:', idToken);
    } catch (error) {
      console.error('Google Sign-In error', error.message);
    }
  };

Я передаю его на маршрут с помощью Postman:

router.post('/google-signin', async (req, res) => {
    const { idToken } = req.body;
    const result = await verifyGoogleToken(idToken);
    if (result.status === 'success') {
      res.send({ message: 'Authentication successful', user: result.decodedToken });
    } else {
      res.status(401).send({ message: 'Authentication failed', error: result.message });
    }
  });

Функция проверкиGoogleToken:

const admin = require('firebase-admin');

const verifyGoogleToken = async (idToken) => {
  try {
    const decodedToken = await firebase.auth().verifyIdToken(idToken);
    console.info("Token validé avec succès", decodedToken);
    return { status: 'success', uid: decodedToken.uid };
  } catch (error) {
    console.error('Erreur lors de la vérification du token', error);
    return { status: 'error', message: error.message };
  }
};
module.exports = { verifyGoogleToken };

Сервер App.js:

const admin = require('firebase-admin');
const serviceAccount = require('./secrets/service-account-file.json'); 

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount)
  });

Я пробовал это 4 раза... и каждый раз получаю одну и ту же ошибку.

Я не вижу подробностей о том, как именно вы передаете токен на маршрут. Возможно, вы делаете что-то не так, но мы не можем понять, что это может быть. Пожалуйста, отредактируйте вопрос, чтобы предоставить полные инструкции о том, как каждый может воспроизвести все шаги, необходимые для возникновения ошибки.

Doug Stevenson 05.05.2024 15:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
167 204
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что я использовал неправильный токен. Я использовал токен входа в Google вместо токена Firebase. Поэтому, когда я передаю свой токен на сервер, я получаю эту ошибку.

Итак, вот решение, которое я нашел:

import auth from '@react-native-firebase/auth'; //import this
import { GoogleSignin } from '@react-native-google-signin/google-signin';
        
const { idToken } = await GoogleSignin.signIn(); // here you get Google Sign in token
    
const googleCredential = auth.GoogleAuthProvider.credential(idToken);
const userCredential = await auth().signInWithCredential(googleCredential); // use google sign in token for auth to Firebase
const firebaseIdToken = await userCredential.user.getIdToken(true);
console.info('Firebase ID Token:', firebaseIdToken); // Use this token for server.

Затем вы можете передать firebaseIdToken на свой сервер.

Другие вопросы по теме