Firebase Functions报'unauthenticated'但函数已执行问题求助
问题原因及解决方案
核心问题:混淆了云函数的触发类型
你写的verifyFacebook是Firebase Auth 用户创建触发器函数,当新用户通过Facebook登录创建账号时,这个函数会自动触发执行,不需要客户端主动调用。但你在客户端代码里尝试调用同名的HTTPS云函数,而实际上你并没有部署对应的HTTPS函数,或者该HTTPS函数不存在,这就导致客户端调用时返回unauthenticated错误——本质是找不到可调用的HTTPS端点,或者权限配置不匹配。
而emailVerified被正确修改,是因为Auth onCreate触发器已经自动完成了更新,和你客户端的调用完全无关。
解决步骤
移除客户端的HTTPS函数调用代码
既然Auth触发器会自动处理新用户的emailVerified设置,完全不需要客户端手动调用,直接删除这段代码即可:// 删掉这段冗余代码 if (facebookUser.user?.emailVerified == false) { try { HttpsCallable callable = FirebaseFunctions.instance.httpsCallable('verifyFacebook'); await callable.call(); } on FirebaseFunctionsException catch (e) { print(e.code); print(e.plugin); print(e.message); } }如果确实需要手动触发(非必要场景)
若你有特殊需求需要手动调用函数更新emailVerified,需要将云函数改成HTTPS类型,而非Auth触发器:exports.verifyFacebook = functions.https.onCall(async (data, context) => { // 验证用户是否已完成Firebase认证 if (!context.auth) { throw new functions.https.HttpsError('unauthenticated', '用户未登录'); } // 更新当前登录用户的emailVerified属性 await admin.auth().updateUser(context.auth.uid, { emailVerified: true }); return { success: true }; });同时确保客户端调用时,用户已经完成Firebase认证(
FirebaseAuth.instance.currentUser不为null),云函数权限保持默认即可(默认只允许认证用户访问)。关于权限配置的误区
你添加allUsers权限无法解决问题,是因为错误的函数类型导致的——Auth触发器不需要配置HTTPS函数的权限,而错误调用不存在的HTTPS函数时,权限配置也无法生效。
内容的提问来源于stack exchange,提问作者David Lee
相关产品推荐
相关产品推荐

