首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >支持插件的Strapi v4扩展服务器API不起作用

支持插件的Strapi v4扩展服务器API不起作用
EN

Stack Overflow用户
提问于 2021-12-02 19:26:44
回答 2查看 2.1K关注 0票数 3

我试图遵循Strapiv4.0.0关于https://docs.strapi.io/developer-docs/latest/developer-resources/plugin-api-reference/server.html#entry-file的指南来扩展用户-权限插件来添加自定义路由/控制器,但是到目前为止还没有成功。我按照文档中的说明添加自定义文件,但UI中没有任何更改。

I设法将其用于以黄色高亮显示的普通API,但对于用户权限插件却无法这样做。

在以前的3.6.8版本中,这个功能是通过扩展文件夹允许的。

我是否遗漏了新指南中的一些内容,我甚至尝试复制来自node_modules > @strapi >plugin的文件,并向退出的控制器文件中添加一个新的路由和方法,但它仍然没有反映我们为角色分配不同路由权限的部分中的变化。用户权限插件仍然显示原始路由,没有更改.

谢谢,

EN

回答 2

Stack Overflow用户

发布于 2022-01-03 01:01:45

我在研究几乎相同的问题时遇到了这个帖子,我想分享我的解决方案。

首先,我发现这部分文档比您引用的文档更有用:https://docs.strapi.io/developer-docs/latest/development/plugins-extension.html

我的目标是编写一条新的路径,根据这里的注释来验证JWT令牌:https://github.com/strapi/strapi/issues/3601#issuecomment-510810027,但为Strapi v4更新。

结果证明,解决办法很简单:

  1. 创建一个新的文件夹结构:如果不存在,则创建./src/extensions/user-permissions。如果
  2. 不存在,则创建一个新的文件./src/extensions/user-permissions/strapi-server.js
  3. 向文件中添加以下内容:

G 211

代码语言:javascript
运行
复制
module.exports = (plugin) => {
  plugin.controllers.<controller>['<new method>'] = async (ctx) => {
    // custom logic here
  }

  plugin.routes['content-api'].routes.push({
    method: '<method>',
    path: '/your/path',
    handler: '<controller>.<new method>',
    config: {
      policies: [],
      prefix: '',
    },
  });

  return plugin;
};

如果您不确定哪些控制器可用,可以始终检查API文档或console.log(plugin)console.log(plugin.controllers)

在管理服务器重新启动后,您应该按照您的期望在用户权限部分看到您的新路由,并且您可以根据您认为合适的情况为它分配权限。

我的完整strapi-server.js文件包括验证JWT的逻辑:

代码语言:javascript
运行
复制
module.exports = (plugin) => {
  plugin.controllers.auth['tokenDecrypt'] = async (ctx) => {
    // get token from the POST request
    const {token} = ctx.request.body;

    // check token requirement
    if (!token) {
      return ctx.badRequest('`token` param is missing')
    }

    try {
      // decrypt the jwt
      const obj = await strapi.plugin('users-permissions').service('jwt').verify(token);

      // send the decrypted object
      return obj;
    } catch (err) {
      // if the token is not a valid token it will throw and error
      return ctx.badRequest(err.toString());
    }
  }

  plugin.routes['content-api'].routes.push({
    method: 'POST',
    path: '/token/validation',
    handler: 'auth.tokenDecrypt',
    config: {
      policies: [],
      prefix: '',
    },
  });

  return plugin;
};
票数 4
EN

Stack Overflow用户

发布于 2021-12-03 21:11:01

导出路由时,您需要导出类型,无论是content还是admin。查看node_modules中的Strapi电子邮件插件,例如,更改您的路由文件夹中的文件夹和文件结构来匹配它,然后您将能够在管理面板中设置权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70205378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档