繁体   English   中英

如何区分 Firestore 中的不同权限错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM