为什么防火区安全规则不起作用



我的应用程序使用RealTime数据库,它有安全规则:

{
"rules": {
".read": "auth.uid != null",
".write": "auth.uid != null"
}
}

这是数据获取的代码片段:

func firstLaunchCataloguePartsFetchData(
result : @escaping((Result<[CatalogueParts], Error>) -> Void)
) {
if ConnectionManager.shared.isConnected {
let baseUrl = Constants.baseUrl + DirectoryType.catalogueParts.addJsonAbbreviation
guard let url = URL(string: baseUrl ) else { return }
URLSession.shared.dataTask(with: url) {data, response, error in
if let error = error {
result(.failure(error))
} else if let data = data,
let jsonString = String(data: data, encoding: .utf8),
let downloadedMarks = Mapper<CatalogueParts>().mapArray(JSONString: jsonString) {
result(.success(downloadedMarks))
} else {
result(.success([]))
}
}
.resume()
} else {
let error = NSError(domain: "Connection error detected", code: 911, userInfo: nil)
result(.failure(error))
}
} 

这里我使用接收到的数据来绘制一个表格视图:

func getFirstLaunchCatalogueParts() {
ShopManager.shared.firstLaunchCataloguePartsFetchData { [weak self] result in
guard let self = self else { return }
switch result {
case .success(let catalogueParts):
self.catalogueParts = catalogueParts
DispatchQueue.main.async {
self.tableView.reloadData()
}
case .failure(let error as NSError):
self.showErrorAlert(error: error, withAction: nil)
}
}
}

即使我获得了授权,也通过了电话授权(Auth.Auth((.currentUser?。uid有一些值(-我无法显示tableView,收到的数据为零

但是!这很好,表被渲染,如果规则是这样制定的,一切都会正常工作:

{
"rules": {
".read": "true",
".write": "auth.uid != null"
}
}

在我看来,问题是:

我使用这种方法访问Firebase,这不是读取Firebase服务数据的基本方法

let baseUrl = Constants.baseUrl + ".JSON"
// where baseUrl is just http path to my database and if you add ".JSON" to it - you 
// open the contents of the database in Json
guard let url = URL(string: baseUrl ) else { return }
URLSession.shared.dataTask(with: url) {data, response, error in

然后我使用给定的数据来解析模型:

let jsonString = String(data: data, encoding: .utf8),
let downloadedDataAsModel = Mapper<CatalogueParts>().mapArray(JSONString: jsonString)

问题是,使用这种方法,无论规则如何,在任何情况下都可以获得数据,而ObjectMapper处理并创建一个实例,但它是不完整的,在这里不会发生错误

let downloadedDataAsModel = Mapper<CatalogueParts>().mapArray (JSONString: jsonString)

因此,该方法不允许除";读作:true;

我尝试使用这种方法,一切都很有效——根据授权状态,访问是允许还是限制的。现在还需要决定如何使用这种方法以Json的形式获取数据以进行进一步处理=(

func fetchData(){
let ref = Constants.ref
ref.child("CatalogueParts").getData { error, snapshot in
guard error == nil else {
print(error!.localizedDescription)
return;
}
let someValue = snapshot.value
print(someValue)
}
}

最新更新