使用我的 Xcode 项目在 Firebase 中检查应用程序

问题描述 投票:0回答:1

我正在尝试在我的 Xcode 项目中实现 App Check,以便只允许我的应用程序访问 Firebase 数据库。

我已在 Firebase 中配置了应用检查设置。我已将 Firebase 数据库规则更改为:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.token.app_check != null;
    }
  }
}

(该应用程序不需要身份验证) 因此,只有收到有效令牌时,才会授予访问权限。我的 Swift 代码如下所示:

//
//  Gossip_GirlApp.swift
//  Gossip-Girl
//
//  Created by Julius Pleunes on 25/11/2024.
//

import SwiftUI
import Firebase
import FirebaseAppCheck

@main
struct Gossip_GirlApp: App {
    init() {
        FirebaseApp.configure()
        
        // Configureer App Check met DeviceCheck
        AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())
        
        // Debugging: Controleer Firebase configuratie
        FirebaseConfiguration.shared.setLoggerLevel(.debug)

        print("✅ Firebase en App Check zijn geconfigureerd")
        
        // Debugging: Test App Check token
        AppCheck.appCheck().token(forcingRefresh: true) { token, error in
            if let error = error {
                print("⚠️ Error fetching App Check token: \(error.localizedDescription)")
            } else if let token = token?.token {
                print("✅ App Check token: \(token)")
            } else {
                print("⚠️ App Check token is nil")
            }
        }

        // Test Firestore-toegang
        let db = Firestore.firestore()
        db.collection("posts").getDocuments { snapshot, error in
            if let error = error {
                print("⚠️ Error fetching posts: \(error.localizedDescription)")
            } else if let documents = snapshot?.documents {
                print("✅ Successfully fetched posts:")
                for document in documents {
                    print("\(document.documentID): \(document.data())")
                }
            } else {
                print("⚠️ No documents found in 'posts' collection.")
            }
        }
    }

    var body: some Scene {
        WindowGroup {
            MainView() // Start met de tab bar view
        }
    }
}

如您所见,我正在使用 DeviceCheck 功能来生成密钥,但我的应用程序无法检索数据。如果我将 Firebase 中的规则更改为向所有人开放,那么它会成功检索数据,所以我认为问题出在 Firebase 代码中,但我无法弄清楚出了什么问题

尝试获取数据时,我在 Xcode 控制台中看到此错误:

⚠️ 获取帖子时出错:权限缺失或不足。

swift firebase google-cloud-firestore firebase-security firebase-app-check
1个回答
0
投票

Firebase App Check 根本没有集成到安全规则中。您无法编写任何规则来使用 App Check 来控制对资源的访问。

您只需按照文档中的说明即可为Firestore启用App Check,完全不涉及安全规则:

启用实时数据库、Cloud Firestore、云的强制执行 Firebase 中的存储、身份验证(测试版)和 Vertex AI,请遵循 下面的说明。一旦您为产品启用强制执行,所有 对该产品未经验证的请求将被拒绝。

  1. 打开 Firebase 控制台的“应用程序检查”部分。

  2. 展开您想要启用强制执行的产品的指标视图。

  3. 单击强制并确认您的选择。

    (您的项目必须升级到带有 Identity Platform 的 Firebase 身份验证才能强制执行身份验证。)

© www.soinside.com 2019 - 2024. All rights reserved.