【发布时间】:2019-04-29 18:44:46
【问题描述】:
简而言之,我希望在更改用户昵称时在应用中进行事务时从 firebase/firestore 获得有意义的验证错误。
我正在努力寻找一个好的方法。让我通过这个简单的例子来解释:
React Native 中用户个人资料页面的“昵称”TextInput。 用户可以更改“昵称”值并单击保存。 如果昵称字符串有任何问题,则会向用户显示有意义的错误/反馈,例如:昵称太短/太长。昵称包含坏词。昵称已被使用。
我已经通过使用 Cloud Functions 和单击“保存”时应用程序中的 https 调用来完成此操作。这允许我向用户显示任何输入验证错误,因为这是对服务器的正确请求,我可以在其中抛出可以直接向用户显示的错误。但感觉……笨拙?
昵称本身的服务器端验证会检查长度 > 4 && 长度
真的没有更简单的方法吗?以上是最好的方法吗?
如果我能以某种方式在 firestore 规则中抛出错误并在客户端捕获它,然后将其显示给用户,那将很容易 - 然后我可以在 firestore 规则中使用正则表达式等进行所有验证。但我所看到的只是允许和拒绝——它纯粹是基于访问的,所以如果我尝试进行任何验证,用户最终会得到“权限被拒绝”。所以我必须在firestore中执行规则(为了安全),并在客户端编写验证以向用户显示有意义的错误(即客户端不发送任何数据,除非它是有效的)。如果没有客户端验证,它只会在尝试使用 firebase.firestore.doc('users/blahblah').update({nickname: new_value }) 直接更新时抛出“权限被拒绝”错误。
这当然是可行的,但不如让服务器验证并发出错误消息那样灵活 - 节省大量输入 - 如果我以后必须添加更多验证规则,则不需要更新应用程序 - 可以只需在服务器上执行即可。
我只是觉得通过firebase.firestore函数在应用中做一个简单的事务会更优雅,并且能够捕获错误。
我觉得我可能遗漏了一些东西,但我花了两天时间搜索 Google,阅读了所有 firebase + firestore 文档和 react-native-firebase 文档 + 示例。所以我希望这里有人遇到过类似的情况,花几分钟时间来节省一些智慧:)
干杯!
【问题讨论】:
标签: google-cloud-firestore react-native-firebase