uid
使用phone number
。uid
。然后我在Firestore中创建了一个带有 Document ID users
的 Collection 为uid
,例如:users/uid
现在,如果用户想写入users/userId
,
condition
是true
,如下所示:
match /users/{userId} {
allow write: if request.auth.uid == userId;
}
正如我在number 2
中提到的,userId
是加密的,但是request.auth.uid
未加密。
那么我们如何在(userId)
解密呢?
如果我使用sha256哈希,那么如何在客户端解码sha256?
我正在使用crypto-js
答案 0 :(得分:3)
根据文档,您可以use hashed values in security rules。如果您未使用所描述的哈希算法之一,则它将无法正常工作。您可以在release notes中了解其工作原理:
新的散列和相邻散列方法是:
hashing.crc32() hashing.crc32c() hashing.sha256() hashing.md5() <ByteValue>.toBase64() <ByteValue>.toHexString() <String>.toUtf8()
例如,以前,如果Firestore中的电子邮件版本为 使用SHA-256散列,则无法将该电子邮件与 与auth对象一起发送的纯文本电子邮件。现在您可以:
hashing.sha256(request.auth.email.utf8()) == resource.data.ownerEmailHash
或者,如果您在文档中有一个字段供用户存储 他们的中篇小说,您可能希望使用一个较短的标识符 很长的字符串:
match /novellas/{hash} { allow write: if hash == hashing.sha256(request.resource.data. novella.utf8()) && resource == null }
字符串被视为UTF-8编码的字节,返回值为 字节类型:
hashing.md5("Tag".utf8()) => b"wQEFjn6iG7vypayJMIjpCw=="