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可防止自动添加字段的主要内容,如果未能解决你的问题,请参考以下文章

如何防止应用重启后自动创建子片段?

如何防止 chrome 自动填充表单中的每个字段?

如何在 Parse-Server 中实现“protectedFields”?

在隐藏字段中添加反 CSRF 令牌真的可以防止 CSRF 攻击吗? [复制]

如何防止Android studio格式化build.gradle

jquery 防止自动填充表单