Функция облака Firebase возвращает ошибку, несмотря на действительный токен на стороне клиента в RACE Native (EXPO)Javascript

Форум по Javascript
Ответить
Anonymous
 Функция облака Firebase возвращает ошибку, несмотря на действительный токен на стороне клиента в RACE Native (EXPO)

Сообщение Anonymous »

Я сталкиваюсь с очень запутанной ошибкой в ​​рамках проекта Native (Expo) React (Expo) с Firebase. У меня есть функция Callible Cloud (

Код: Выделить всё

submitRating
), которая систематически возвращает несаутентированную ошибку , хотя мой код на стороне клиента доказывает, что пользователь правильно вошел в систему. Действие голосования вызывает облачную функцию.

[*] на стороне клиента: onauthstatechanged и auth.currentuser оба подтверждают, что пользователь входит.

Код: Выделить всё

getIdToken
) Прямо перед вызовом.

[*] на стороне сервера: Облачная функция получает запрос, но контекст. Auth null , которая запускает мою ошибку проверки. Код < /h2>
  • Все мои услуги инициализированы из одного и того же приложения < /code> экземпляра. < /Li>
    < /ol>

    Код: Выделить всё

    import { initializeApp } from "firebase/app";
    import { initializeAuth, getReactNativePersistence } from "firebase/auth";
    import AsyncStorage from "@react-native-async-storage/async-storage";
    import { getFirestore } from "firebase/firestore";
    import { getStorage } from "firebase/storage";
    import { getFunctions } from "firebase/functions";
    
    const firebaseConfig = {
    apiKey: "XXX",
    authDomain: "XXX.firebaseapp.com",
    projectId: "XXX",
    // ...
    };
    
    const app = initializeApp(firebaseConfig);
    
    export const auth = initializeAuth(app, {
    persistence: getReactNativePersistence(AsyncStorage),
    });
    
    export const db = getFirestore(app);
    export const storage = getStorage(app);
    export const functions = getFunctions(app, "us-central1");
    < /code>
    
     Вызов на стороне клиента (VoteScreen.js
    ) Я подтвердил, что auth.currentuser действителен до того, как эта функция будет вызвана.

    Код: Выделить всё

    import { httpsCallable } from "firebase/functions";
    import { auth, functions } from "../firebaseConfig";
    
    const handleVote = async () => {
    setIsSubmitting(true);
    const currentPhoto = votablePhotos[currentPhotoIndex];
    
    try {
    console.log("Utilisateur actuel:", auth.currentUser.uid);
    const token = await auth.currentUser.getIdToken();
    console.log("Token JWT récupéré:", token ? "Oui" : "Non");
    
    const submitRating = httpsCallable(functions, 'submitRating');
    const result = await submitRating({
    photoId: currentPhoto.id,
    challengeId: currentPhoto.challengeId,
    themeRating: 5,
    qualityRating: 5,
    });
    
    console.log("Succès:", result.data.message);
    goToNextPhoto();
    
    } catch (error) {
    console.error("Erreur d'appel de la fonction:", error);
    // C'est ici que l'erreur s'affiche
    } finally {
    setIsSubmitting(false);
    }
    };
    < /code>
    
     Cloud Function Code (functions/index.js
    )

Код: Выделить всё

const functions = require("firebase-functions");
const admin = require("firebase-admin");

admin.initializeApp();
const db = admin.firestore();

exports.submitRating = functions.https.onCall(async (data, context) => {
functions.logger.log("Appel reçu. UID de l'authentification :", context.auth ? context.auth.uid : "Non authentifié");

if (!context.auth) {
// Cette erreur est systématiquement déclenchée
throw new functions.https.HttpsError(
"unauthenticated",
"Vous devez être connecté pour noter une photo."
);
}

// ... reste de la logique de la fonction ...
return { success: true, message: "Notation enregistrée !" };
});

Что я получаю (журналы)

Консоль приложения на стороне клиента:

Код: Выделить всё

LOG Current user UID: iowfvS7nkNfPrTc9OOGVKumUSr42
LOG JWT Token successfully retrieved: Yes
ERROR Error calling function: [FirebaseError: You must be logged in to rate a photo.]
cloud Function Console:

Код: Выделить всё

Call received. Auth UID: Unauthenticated

То, что я уже пробовал

Я прошел длинный процесс отладки и могу подтвердить, что проблема не связана с:

[*] План биллинга : проект находится на (pay- as- go-go. />
[*] ✅ Client-Side Config : FireBaseConfig является правильным, и все службы должным образом инициализируются из одного и того же приложения Encement.

[*] ✅ Правила безопасности : Правила для хранилища. />
[*] ✅ cors : политика CORS ведра хранилища была установлена ​​с использованием GSUtil .

[*] Функциональная область : Регион функции (

Код: Выделить всё

us-central1
) правильно указан в инициализации на стороне клиента.

[*] ✅ проверка приложений : служба не применяется на облачных функциях.

[*] ✅ : i все кэши (

Код: Выделить всё

npm cache clean
, expo start -c ).

✅ Ultimate Test [/b]: проблема сохраняется даже на совершенно новом, чистое Firebase Project , который является самой запутанной частью. Метод ручного Fetch также терпит неудачу с той же ошибкой. Отсутствует?
Заранее спасибо за вашу помощь!

Подробнее здесь: https://stackoverflow.com/questions/797 ... lient-side
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»