Firestore安全规则报错:diff()函数参数数量不正确的解决方法
修复Firestore规则中diff()函数的参数错误
错误原因
Firestore规则里的diff()方法必须传入一个对比基准的数据源参数,你之前调用diff()时没传任何参数,所以触发了"Incorrect number of arguments supplied to function: diff"的报错。
request.resource.data代表修改后的文档数据,要判断哪些字段被改动,必须和当前文档的原始数据(resource.data)做对比,这就是diff()需要的参数。
修复后的规则代码
function isEditableFieldForUsersPublic(request) { return request.resource.data.diff(resource.data).changedKeys().hasOnly(['avatarUrl', 'firstName']); }
代码说明
resource.data:当前Firestore中存储的文档原始数据diff(resource.data):计算修改后数据与原始数据的差异changedKeys():提取所有被修改的字段名称集合hasOnly(['avatarUrl', 'firstName']):限制只有指定的字段能被修改,其他字段的改动会被规则拦截
内容的提问来源于stack exchange,提问作者Jasperan
相关产品推荐
相关产品推荐

