[英]How to differentiate between different permissions errors in Firestore
我正在使用 Firebase 构建应用程序,并使用客户端 Javascript SDK 访问 Firestore 数据。 我遇到了一个问题:根据我的 Firestore 规则,如果无法读取文档,则无法确定为什么无法读取。 允许文档读取的规则的任何失败都会产生相同的PERMISSION_DENIED: Missing or insufficient permissions
错误。
如果无法确定访问被拒绝的原因,我无法在 UI 中提供获取资源访问权限的正确方法,或者说出了什么问题(例如,您必须登录才能使用此小玩意,或者您必须购买订阅工作这个小部件)来自节点背景,我写了很多代码使用 http 这样的响应代码(伪代码):
if (!doc) {
// present a 'not found' message to the user
return {status: 404}
}
else if (!req.user) {
// present a log in/sign up dialog
return {status: 401}
}
else if (req.user !== doc.owner) {
// present a no-access message
return {status: 403}
}
else {
return {status: 200: body: doc}
}
没有编写服务器端层来处理权限而不是使用 firestore.rules,或者创建一个单独的集合来处理权限,这必须手动保持同步并且需要 2 倍的读取,有没有办法编写规则以便可以区分不同的失败原因? 好像如果firestore要实现一个deny
关键字,这很容易:
deny read 401: if !request.auth.uid
deny read 403: if request.auth.uid !== resource.data.owner
但是,唉,没有这样的deny
关键字。
目前无法自定义该消息。 如果用户未登录,解决此问题的一种方法可能是不将请求作为第一位。例如:
if (getAuth().currentUser) {
// fetch data
} else {
alert("Please login")
}
401 和 403 可能有点挑战性,但如果你能列出在什么情况下可能会出现 403 错误,那么你绝对可以用这种方式构建你的代码。
对于 404,如果返回DocumentSnapshot ,您可以使用.exists
属性
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.