1
我有一个需要增加的firebase的价值,它受竞争条件的限制,所以我宁愿一一做。从javascript增加firebase价值,受制于
node: {
clicks: 3
}
我需要设置clicks = clicks + 1
只要clicks < 20
。我可以通过Web API进行一次调用吗?
我有一个需要增加的firebase的价值,它受竞争条件的限制,所以我宁愿一一做。从javascript增加firebase价值,受制于
node: {
clicks: 3
}
我需要设置clicks = clicks + 1
只要clicks < 20
。我可以通过Web API进行一次调用吗?
见reference documentation for a transaction:
var ref = firebase.database().ref('node/clicks');
ref.transaction(function(currentClicks) {
// If node/clicks has never been set, currentRank will be `null`.
return (currentClicks || 0) + 1;
});
上面简单地增加值原子,而无需用户覆盖其他人的结果,他的选择。
接下来,确保该值永远不能> 20:
var ref = firebase.database().ref('node/clicks');
ref.transaction(function(currentClicks) {
// If node/clicks has never been set, currentRank will be `null`.
var newValue = (currentClicks || 0) + 1;
if (newValue > 20) {
return; // abort the transaction
}
return newValue;
});
良好的措施,你还需要设置安全规则,只允许点击最多为20个安全规则在Firebase数据库服务器上强制执行,这样可确保即使恶意用户也无法绕过您的规则。根据Firebase documentation on validating data中的示例:
{
"rules": {
"node": {
"clicks": {
".validate": "newData.isNumber() &&
newData.val() >= 0 &&
newData.val() <= 20"
}
}
}
}
您可以使用Firebase验证规则吗?像'“.validate”:“newData.val()<20”' –