Firebase 使用谷歌云功能更改HTTP状态代码

Firebase 使用谷歌云功能更改HTTP状态代码,firebase,rest,error-handling,google-cloud-functions,Firebase,Rest,Error Handling,Google Cloud Functions,我的代码检查用户是否已授权,如果用户已授权,则运行正确的代码。如果用户不是,则运行reject()以拒绝承诺 如果我运行经过身份验证的代码,我将获得 {“error”:{“status”:“INVALID_参数”,“message”:“Bad Request”} 我正在尝试将状态代码更改为禁止(代码403),您通常会使用res.status(403)执行此操作,但由于这是一个承诺,因此它有所不同。如何更改返回的错误代码 我的代码如下: const cloudFunction = function

我的代码检查用户是否已授权,如果用户已授权,则运行正确的代码。如果用户不是,则运行
reject()
以拒绝承诺

如果我运行经过身份验证的代码,我将获得

{“error”:{“status”:“INVALID_参数”,“message”:“Bad Request”}

我正在尝试将状态代码更改为禁止(代码403),您通常会使用
res.status(403)
执行此操作,但由于这是一个承诺,因此它有所不同。如何更改返回的错误代码

我的代码如下:

const cloudFunction = functions.https.onCall((data, context) => {
    return new Promise(function(resolve, reject) {
        auth.verifyIdToken(data.userId).then(function(decodedToken) {
            if(claims.admin === true) {
                // Run code if user has admin role
            }
            else {
                reject()
                // Return error code 403 because user does not have admin role
            }
        }).catch(err => reject(err)) // Return error code 401 because user is not logged in
    })
});

无法更改可调用函数的HTTP状态。可调用函数基本上接管并隐藏请求和响应的HTTP协议。您所要做的就是指定输入和输出对象,SDK处理其他所有事情


如果需要控制响应的HTTP状态,则必须使用常规HTTP类型函数。然后您就可以完全控制请求和响应。

我不明白。什么会改变?如果我取消承诺并执行.then()和.catch()操作,什么会改变?我不建议你这样做。请再读一遍我的答案。您无法控制可调用函数的HTTP状态代码。
您必须改用常规HTTP类型函数
阅读HTTP类型函数的文档以了解它们的工作方式: