gpt4 book ai didi

node.js - 为什么这个可调用的云函数失败并返回 "app":"MISSING"?

转载 作者:行者123 更新时间:2023-12-05 03:28:31 25 4
gpt4 key购买 nike

我正在调用一个运行事务的云函数,但是它向控制台返回一个错误:

Callable request verification passed {"verifications":{"auth":"VALID","app":"MISSING"}}

通过谷歌搜索,我找到了 App Check,这是 Firebase 中的新事物。我正在使用 React-Native firebase npm 包并关注其 documentation由于缺乏适当的解释和示例,有关 App Check 的内容非常困难。

下面是我要在函数中执行的代码:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
const firestore_ = admin.firestore();
// const { CustomProvider } = require("@react-native-firebase/app-check");
const appCheckForDefaultApp = admin.appCheck();
const GeoPoint = admin.firestore.GeoPoint;
const FieldValue = admin.firestore.FieldValue;
const _geofirestore_ = require("geofirestore");
const GeoFirestore = _geofirestore_.initializeApp(firestore_);



exports.createNew = functions.runWith({
allowInvalidAppCheckToken: true // Opt-out: Requests with invalid App
// Check tokens continue to your code.
}).region('europe-west6').https.onCall(async (data, context) => {

try {

//Checking that the user calling the Cloud Function is authenticated
if (!context.auth) {
return "The user is not authenticated: " + context.auth;
// throw new UnauthenticatedError('The user is not authenticated. Only authenticated Admin users can create new users.');
}

const longitude = data.longitude;
const latitude = data.latitude;
const thirty_mins_old = data.thirty_mins_old;
const currenttime = data.currenttime;

const GeoFirestore_ = new _geofirestore_.GeoFirestore(firestore_);
const sfDocRef = GeoFirestore_.collection('mycollection')
.limit(1)
.near({ center: new GeoPoint(latitude, longitude), radius: 0.05 });

GeoFirestore.runTransaction((transaction) => {
const geotransaction = new _geofirestore_.GeoTransaction(transaction, new GeoPoint(latitude, longitude));
return geotransaction.get(sfDocRef._collectionPath).then((sfDoc) => {
...
});
});

} catch (error) {
if (error.type === 'UnauthenticatedError') {
throw new functions.https.HttpsError('unauthenticated', error.message);
} else if (error.type === 'NotAnAdminError' || error.type === 'InvalidRoleError') {
throw new functions.https.HttpsError('failed-precondition', error.message);
} else {
throw new functions.https.HttpsError('internal', error.message);
}
}
});

编辑:我正在调试应用程序,所以我不在生产环境中工作。调试还需要配置这个吗?

最佳答案

您看到的日志消息不是错误 - 它是信息性的。

在每个请求中,您的 callable functions将验证请求中包含的任何身份验证或 appcheck token 。当这些 token 不存在时,执行将传递给您的处理程序 - 如有必要,您有责任处理缺少 token 的请求。看起来您已经在处理丢失身份验证 token 的情况。

在您的 auth 模拟器中执行功能时,auth/appcheck token 会经过最低限度的验证 - 即它们应该是有效的 JWT token ,但我们实际上不会验证签名以确保它由 Firebase Auth/AppCheck 后端签名。

如果您的函数在您的开发环境中出错,我怀疑错误出在其他地方。

关于node.js - 为什么这个可调用的云函数失败并返回 "app":"MISSING"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71242781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com