Firestore 安全规则无法检索 request.auth.token.name

你误解了.indexOf()。indexOf返回可以在数组中找到给定元素的第一个索引,或者-1如果它不存在。inindex的索引也是如此。简而言之,您将对象 ( ) 与数字 ( ) 进行比较。countercounterscounterindex


也就是说,它还取决于您在数组中搜索对象的方式。如果尝试查找与某个键/值结构匹配的对象,.indexOf由于您提到的原因将不起作用。正如 Gabriele 所指出的,如果使用参考进行搜索,它将起作用。


如果使用引用不是一种选择,作为替代,您可以使用.findIndex(), 或.map(),并根据其属性之一查找对象,例如id.


const counters = [{id: 1, value: 0}, {id: 2, value: 0}, {id: 3, value: 0}, {id: 4, value: 0}];


const findBySameness = {id: 3, value: 0};

const findByRef = counters[2];


const indexBySameness = counters.indexOf(findBySameness);

console.log('Index by sameness: ', indexBySameness); // Do not find the object index

const indexByRef = counters.indexOf(findByRef);

console.log('Index by reference: ', indexByRef); // Found the object index


// If a reference to the object is not available you can use the following methods


// With .findIndex

const index3 = counters.findIndex(item => item.id === findBySameness.id)

console.log('Index: ', index3); // Found the object index


// With .map

const index2 = counters.map(item => item.id).indexOf(findBySameness.id);

console.log('Index: ', index2); // Found the object index


胡子哥哥
浏览 139回答 2
2回答

倚天杖

我无法直接解决这个问题,但我通过使用 UserID 而不是用户名进行身份验证绕过了这个问题,如下所示:request.resource.data.uid == request.auth.token.sub请注意,您的 HelloCollection 查询也应更改,以便将用户 ID 与文本一起存储。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript