Parse-Server可防止自动添加字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Parse-Server可防止自动添加字段相关的知识,希望对你有一定的参考价值。
现在,如果我将一个字段添加到Parse对象然后保存它,新列将显示在Parse仪表板中。
例如,运行后:
let media = new Parse.Object("Media");
media.set("foo", "bar");
await media.save();
我将有一个名为foo
的新专栏。
有可能防止这种情况发生吗?
答案
您必须为每个类添加一个beforeSave触发器,保留所有键的模式,迭代request.object
的键,并查看是否有任何不属于您的模式。然后,您可以取消设置它们并调用response.success()
,或者您可以调用response.error()
来完全阻止保存,最好使用指示违规字段的消息。
const approvedFields = ["field1", "field2", "field3"];
Parse.Cloud.beforeSave("MyClass", function(request, response) {
let object = request.object;
for( var key in object.dirtyKeys() ) {
if( approviedFields.indexOf(key) == -1 ) return response.error(`Error: Attempt to save invalid field: ${key});
}
response.success();
});
编辑:
由于这引起了一些注意,我想我会补充一点,你可以获得你班级的当前架构。来自文档:https://docs.parseplatform.org/js/guide/#schema
// create an instance to manage your class
const mySchema = new Parse.Schema('MyClass');
// gets the current schema data
mySchema.get();
目前尚不清楚这是否同步(你必须自己测试一下,一旦你知道就随意评论更新答案!)
但是,一旦拥有了模式,它就有一个fields属性,它是一个对象。检查链接是否有这些外观。
您可以通过迭代它的键来验证对象,并查看schema.fields是否具有该属性:
Parse.Cloud.beforeSave('MyClass', (request, response) => {
let object = request.object;
for( var key in object.dirtyKeys() ) {
if( !schema.fields.hasOwnProperty(key) ) < Unset or return error >
}
response.success();
}
对于刚刚从最新版本的Parse-Server开始的任何人来说,请求方案已经更改为不再使用响应对象。你只需返回结果。所以记住这一点。
以上是关于Parse-Server可防止自动添加字段的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Parse-Server 中实现“protectedFields”?
在隐藏字段中添加反 CSRF 令牌真的可以防止 CSRF 攻击吗? [复制]