我正在尝试在我的 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 控制台中看到此错误:
⚠️ 获取帖子时出错:权限缺失或不足。
Firebase App Check 根本没有集成到安全规则中。您无法编写任何规则来使用 App Check 来控制对资源的访问。
您只需按照文档中的说明即可为Firestore启用App Check,完全不涉及安全规则:
启用实时数据库、Cloud Firestore、云的强制执行 Firebase 中的存储、身份验证(测试版)和 Vertex AI,请遵循 下面的说明。一旦您为产品启用强制执行,所有 对该产品未经验证的请求将被拒绝。
打开 Firebase 控制台的“应用程序检查”部分。
展开您想要启用强制执行的产品的指标视图。
单击强制并确认您的选择。
(您的项目必须升级到带有 Identity Platform 的 Firebase 身份验证才能强制执行身份验证。)