【问题标题】:Unauthenticated response status from firebase function来自 Firebase 功能的未经身份验证的响应状态
【发布时间】:2021-04-06 03:20:59
【问题描述】:

每当我尝试发布功能 https://europe-west3-[my-project].cloudfunctions.net/[my-function-name] 的请求时,我都会收到带有正文的 401 响应:

{
    "error": {
        "message": "Unauthenticated",
        "status": "UNAUTHENTICATED"
    }
}

方法本身包含验证:

export const myFunctionName = regionFunctions.https.onCall(
    async (request, context) => {
        if (!userIsAuthenticated(context)) return {status: 401}

        if (!userIsAdmin(context)) return {status: 403}

        await syncCategories()

        return {status: 200}
    })

export const userIsAuthenticated = (context: CallableContext) => {
        return context.auth
    }

我尝试做的是在请求授权标头中使用 Firebase 项目设置中的 服务器密钥。

我是否使用了错误的服务器密钥或可能是什么问题?

非常感谢。

【问题讨论】:

    标签: node.js firebase firebase-authentication google-cloud-functions


    【解决方案1】:

    对于可调用函数,您通常根本不应该处理标头。客户端 SDK 将自动为您处理所有这些,如 documentation 所示。

    但如果您确实需要使用 HTTPS 直接调用可调用函数,则 Authorization 标头需要是 protocol documentation 中所述的 Firebase 身份验证用户 ID 令牌。它不是服务器密钥。

    【讨论】:

      【解决方案2】:

      谢谢道格,

      您的回答帮助我解决了这个问题。

      我做了什么: 登录到我的应用程序,通过浏览器控制台查看用户 ID 令牌,将其复制到 Authorization 标头并且它工作。

      【讨论】:

        【解决方案3】:

        是的,可以使用来自谷歌云的 API KEY。 你必须使用这个概念: 请求格式:标头 对可调用触发器端点的 HTTP 请求必须是具有以下标头的 POST: 可选:X-Firebase-AppCheck: 发出请求的客户端应用提供的 Firebase 应用检查令牌。后端自动验证此令牌并对其进行解码,将 appId 注入处理程序的上下文中。如果无法验证令牌,则拒绝请求。 (适用于 SDK >=3.14.0) 如果包含任何其他标头,则请求将被拒绝,如下面的响应文档中所述。

        【讨论】:

          猜你喜欢
          • 2020-11-27
          • 2019-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-27
          • 2015-07-16
          • 1970-01-01
          • 2019-03-17
          相关资源
          最近更新 更多