Strapi v4 清理实体

der*_*nch 9 strapi

我现在正在尝试新的 Strapi v4 (4.0.0) 社区版。我有一个自定义控制器,它查询当前用户并(将来)获取相关对象。

当我使用 Strapi v3 执行此操作时,我使用内置sanititzeEntitiy辅助函数从用户实例中删除敏感字段。然而在 v4 中,这个功能似乎不再存在,我不知道如何实现这一点。

有没有人可以帮助我解决这个问题?到目前为止我的代码是:

module.exports = {
  currentUser: async(ctx, next) => {
    let user = ctx.state.user;
    // TODO: sanitize this
  }
}
Run Code Online (Sandbox Code Playgroud)

在 v3 中我只是这样做了return sanitizeEntity(user);,这会达到预期的效果。我只是不知道如何在 v4 中执行此操作,并且在文档中找不到与此相关的任何内容。

小智 8

您需要使用“@strapi/utils”中的“sanitize”实用程序。

const { sanitize } = require('@strapi/utils');

module.exports = createCoreController('api::payment.payment', ({ strapi }) => ({
  async create(ctx) {
    const entity = await strapi.entityService.create('api::payment.payment', {
      data: {
        field1: 1,
        field2: 2,
      },
    });
    const sanitizedEntity = await sanitize.contentAPI.output(entity);

    return { data: sanitizedEntity };
  },
}));

Run Code Online (Sandbox Code Playgroud)


der*_*nch 5

所以我同时在strapi社区论坛上发布了这个问题。一位名叫 JustJerem 的用户给了我这个问题的答案,如下所示:

**const { sanitizeEntity } = require("strapi-utils/lib");**

module.exports = (plugin) => {

  plugin.controllers.user.deleteMe = async (ctx) => {
    const entity = await strapi.entityService.delete('plugin::users-permissions.user', user.id)
    var result = **sanitizeEntity(entity, { model: strapi.getModel('plugin::users-permissions.user') })**
    return result
  };
//...
};
Run Code Online (Sandbox Code Playgroud)

Strapi 论坛的原始答案可以在这里找到:

https://forum.strapi.io/t/v4-0-0-sanitize-user-data/13326/4?u=derelektrischemoench

该解决方案的所有功劳都归功于 Strapi 板上的 JustJerem。像这样做对我有用。希望这也可以帮助其他人。

问候,derelektrischemoench