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

我根据此处的教程编写了一个 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"


胡子哥哥
浏览 163回答 2
2回答

收到一只叮咚

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

相关分类

JavaScript