You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生产环境Firebase Function调用失败(iOS/Swift):重定向过多问题

未授权用户调用Firebase Function的问题解决

问题场景

在iOS/Swift中调用Firebase Function的代码如下:

let functions = Functions.functions()
func callWrapper(funcName: String, data: Any? = nil) async ->  [String: Any]? {
    do {
        let result = try await functions.httpsCallable(funcName).call(data)
        return result.data as? [String : Any]
    } catch {
        if let error = error as NSError? {
            if error.domain == FunctionsErrorDomain {
                let code = FunctionsErrorCode(rawValue: error.code)
                let message = error.localizedDescription
                let details = error.userInfo[FunctionsErrorDetailsKey]
            }
            //todo handle
            print(error)
        }
        return nil
    }
}

调用时出现以下错误:

2023-01-05 22:29:48.821609+0200 wallpapers[41492:641302] Task
<50374BAD-C312-450E-9770-B8300BE8FDB9>.<1> finished with error [-1007]
Error Domain=NSURLErrorDomain Code=-1007 "too many HTTP redirects"
UserInfo={NSLocalizedDescription=too many HTTP redirects,
NSErrorFailingURLStringKey=https://accounts.google.com/v3/signin/rejected?continue=https://uc.appengine.google.com/_ah/conflogin?state%3D~AJKiYcH_jc-hcv6OubZGrM13BmNN37rWX4x6rmTm7rZ4-Lqnr9Kk2C00oVNYR97TOiJ8lcR7vP91c9rv6o89HuwIlj85hxjrj63gbmu1jzGKzkU6S_kvHXv7yGdtaOWJnImTm02c6w9igKt3PbbWcawMsOafXEizRAd8jrT0jSe704DhXZ51m8IgAKv0kXxnblLuu3-DFmm-Uvi30sCPXIRGr_XG2DrMenI-zYGRjTiXf2uBVzIom7nVmKoCxIS7dGTvQozrDisq&dsh=S-1861899242:1672950586288679&flowEntry=ServiceLogin&flowName=WebLiteSignIn&ifkv=AeAAQh7QjO_naDvlYC2CVX-wduN9ft7CbGKMTlrMDHmAba7cHNPiDVDd4AQJzvAJgPnBpbS7sCeK0w&rhlk=no&rrk=32,
NSErrorFailingURLKey=https://accounts.google.com/v3/signin/rejected?continue=https://uc.appengine.google.com/_ah/conflogin?state%3D~AJKiYcH_jc-hcv6OubZGrM13BmNN37rWX4x6rmTm7rZ4-Lqnr9Kk2C00oVNYR97TOiJ8lcR7vP91c9rv6o89HuwIlj85hxjrj63gbmu1jzGKzkU6S_kvHXv7yGdtaOWJnImTm02c6w9igKt3PbbWcawMsOafXEizRAd8jrT0jSe704DhXZ51m8IgAKv0kXxnblLuu3-DFmm-Uvi30sCPXIRGr_XG2DrMenI-zYGRjTiXf2uBVzIom7nVmKoCxIS7dGTvQozrDisq&dsh=S-1861899242:1672950586288679&flowEntry=ServiceLogin&flowName=WebLiteSignIn&ifkv=AeAAQh7QjO_naDvlYC2CVX-wduN9ft7CbGKMTlrMDHmAba7cHNPiDVDd4AQJzvAJgPnBpbS7sCeK0w&rhlk=no&rrk=32,
_NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <50374BAD-C312-450E-9770-B8300BE8FDB9>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <50374BAD-C312-450E-9770-B8300BE8FDB9>.<1>,
NSUnderlyingError=0x6000005f7c00 {Error Domain=kCFErrorDomainCFNetwork
Code=-1007 "(null)"}}.

但使用本地Firebase模拟器时可以正常运行:

functions.useEmulator(withHost: "localhost", port: 5001)

问题解答

Firebase Functions允许未授权用户调用,但需要正确配置函数的权限规则,你遇到的too many HTTP redirects错误正是因为权限配置不当,导致请求被强制跳转到认证页面,进而引发循环重定向。

解决步骤如下:

  • 配置云函数IAM权限

    1. 进入Firebase控制台,打开「云函数」页面
    2. 找到目标函数,点击进入后切换到「权限」标签页
    3. 点击「添加主體」,输入allUsers并选择该主体
    4. 为allUsers授予「Cloud Functions Invoker」角色
      注意:公开函数存在安全风险,请确保函数内部没有敏感操作,或在函数逻辑中添加必要的校验逻辑(比如参数验证)
  • 检查云函数代码中的认证逻辑
    如果你的云函数代码中存在强制校验用户身份的逻辑(比如判断context.auth非空),需要移除或调整这部分代码,允许匿名用户访问

  • 确认客户端初始化正确
    确保App启动时已正确初始化FirebaseApp,你的Swift调用代码本身无需修改,保持匿名调用即可

内容的提问来源于stack exchange,提问作者Olexander Korenyuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:05:35