为了账号安全,请及时绑定邮箱和手机立即绑定

Firebase 可调用函数上下文未定义

Firebase 可调用函数上下文未定义

胡子哥哥 2021-10-14 17:15:09
我根据此处的教程编写了一个 firebase Http 可调用云函数:https : //www.youtube.com/watch?v= 3hj_r_N0qMs from the firebase team。但是,我的函数无法验证用户(我)的自定义声明,因为“context.auth”未定义我已将 firebase、firebase 工具、firebase-functions 和 admin SDK 更新到最新版本。我的函数/Index.ts 文件import * as functions from 'firebase-functions';import * as admin from 'firebase-admin';admin.initializeApp()export const addAdmin = functions.https.onCall((data, context) => {    if (context.auth.token.admin !== true) {        return {            error: 'Request not authorized'        };    }    const uid = data.uid    return grantAdminRole(uid).then(() => {        return {            result: `Request fulfilled!`        }    })})async function grantAdminRole(uid: string): Promise<void> {    const user = await admin.auth().getUser(uid);    if (user.customClaims && (user.customClaims as any).admin === true) {        console.log('already admin')        return;    }    return admin.auth().setCustomUserClaims(user.uid, {        admin: true,    }).then(() => {        console.log('made admin');    })}我的 app.component.ts 代码makeAdmin() {    var addAdmin = firebase.functions().httpsCallable('addAdmin');    addAdmin({ uid: '[MY-USER-ID]' }).then(res => {      console.log(res);    })    .catch(error => {      console.log(error)    })  }如果我不尝试访问“上下文”并且我可以向该用户添加自定义声明,则该函数执行良好。但是,如果我尝试访问 context.auth,则会发现错误:Unhandled error TypeError: Cannot read property 'token' of undefined"
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

错误消息告诉您context.auth没有值。从API 文档中可以看出,auth如果没有经过身份验证的用户发出请求,则为 null。这向我表明,您的客户端应用程序在向可调用函数发出请求时没有登录用户,因此请确保在调用该函数之前是这种情况。如果允许在没有登录用户的情况下调用可调用函数的情况,则需要context.auth在代表该用户执行工作之前通过检查来检查函数代码中的这种情况。


查看完整回答
反对 回复 2021-10-14
  • 2 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信