Я создаю приложение с помощью React Native и nodeJS. У меня уже есть система авторизации. Теперь я пытаюсь реализовать вход в Google. Так :
Я получаю эту проверку ошибок на 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 раза... и каждый раз получаю одну и ту же ошибку.





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