firebase - 服务器端验证逻辑
问题描述
我正在创建某种测验,我向用户提出问题,她需要回答这些问题,如果所有问题都正确回答,我想显示一条成功消息,其中包含在哪里获得奖励的说明。
我的应用程序是一个 Angular-Firebase-Application(Progressive Web App,PWA),完全用 TypeScript 编写。服务器端是带有 FireStore 数据库的 Firebase 托管 Web 应用程序。
因为“客户是邪恶的”,我不想同时将正确答案(和成功消息)下载到客户端并在客户端检查用户答案的有效性 - 我宁愿将用户的答案发送到服务器,它会检查它们并且只有在正确的情况下才会发回成功消息。
这是如何在firebase中完成的?
旁注:我的用户没有以任何形式登录,因此是完全匿名的。
解决方案
如果您使用 Firebase 的数据库(实时数据库或 Firestore)之一来存储答案,则可以使用安全规则来保护对服务器上数据的访问。如果答案是写入的(而不是多项选择),那么您可以结合这两个来实现用例。
实时数据库中的数据结构示例可能是:
{
Question: "What is NoRyb's user ID on Stack Overflow?"
Answer: {
"1288552": "Yes indeed. NoRyb's user ID is 1288552!"
}
}
如果我们随后使用以下规则保护对此的访问:
{
"rules": {
".read": false,
"Question": {
".read": true
},
"Answer": {
"$id": {
".read": true
}
}
}
}
使用这些规则:
- 每个用户都可以阅读问题。
- 没有人可以读取
Answer
节点本身。 - 为了能够阅读答案,您必须知道它的键 (
"1288552"
)。
这个方案有很多变化,包括允许用户在正确答案下写下他们的 UID 时增加他们的分数。限制通常是您愿意花费多少精力,以及您愿意更改数据结构以适应仅使用客户端代码的用例。
不相关:为了能够在不要求他们登录的情况下识别您的用户,请查看 Firebase 的匿名身份验证。
推荐阅读
- xamarin - Xamarin Listview Itemtemplate 外观问题
- mule - 将 xml 有效负载转换为 dataweave 2.0 中的字符串
- passbook - 无效数据错误读取通过**********。清单签名未成功验证。你能告诉这个错误可能意味着什么吗?
- python - 如何使用给定的 bin 和频率值绘制 CDF 或直方图?Python
- r - Bioconductor 上所有可用软件包的列表
- python - 从 pandas 访问器访问 pandas DataFrame
- php - 如何在 API 中使用 ajax 将 laravel 表单数据发布到控制器
- python - 用于获取信息的 Vsphere API 脚本
- mysql - 我们可以在连接表时在连接条件中使用 Case When created 列吗
- javascript - 当我启动我的 React-Native 应用程序时如何修复我的错误?