Strapi / Nuxt - 找不到自定义路线

Posted

技术标签:

【中文标题】Strapi / Nuxt - 找不到自定义路线【英文标题】:Strapi / Nuxt - Can't find custom route 【发布时间】:2021-03-12 15:26:55 【问题描述】:

我用它在strapi和nuxt中设置身份验证: Auth with Strapi and Nuxt

我目前正在尝试检索特定于经过身份验证的用户的项目(已签出此strapi - restrict user to fetch only data related to him)。为此,我在 Strapi (/api/routine/config/routes.json) 中创建了一个自定义路由:


  "method": "GET",
  "path": "/routines/me",
  "handler": "Routine.me",
  "config": 
    "policies": []
  

和一个自定义控制器 (/api/controllers/Routine.js):

module.exports = 
  me: async (ctx) => 
    const user = ctx.state.user;
    if (!user) 
      return ctx.badRequest(null, [ messages: [ id: 'No authorization header was found' ] ]);
    

    const data = await strapi.services.routine.find(user:user.id);  

    if(!data)
      return ctx.notFound();
    

    ctx.send(data);
  ,
;

我已经通过 Strapi 管理员授予经过身份验证的用户访问“我”的权限。当我从 Nuxt 到达终点时:

const 例程 = await axios.get(http://localhost:1337/routines/me)

我收到此错误:

GET http://localhost:1337/routines/me 404(未找到)

为什么找不到自定义路由?我是否使用了错误的端点?

【问题讨论】:

【参考方案1】:

也许您已经解决了,但您似乎忘记了在请求中发送身份验证标头。

    const routines = await axios.get(
        'http://localhost:1337/routines/me', 
            headers: 
                Authorization:
                this.$auth.getToken('local'),
            ,
        

【讨论】:

谢谢@user3195845,我错过了标题!我现在收到一个 403 禁止错误:GET localhost:1337/routines/me 403 (Forbidden)。这与我的 Strapi 配置有关吗?我用你的提示更新了代码,除了我必须使用上下文来访问身份验证,因为我使用的是 asyncData(): 'Authorization': context.app.$auth.getToken('local') 乐于助人 :) 好像您没有通过身份验证?您确定令牌随请求一起传递吗?如果你删除第一个 if 语句 if(!user) 你得到任何结果会发生什么? 它给出了相同的结果:403(禁止)。看来我已通过身份验证,如果我在发送请求之前记录 this.$auth.getToken('local') 它会打印出不记名令牌。我认为您是对的,并且以某种方式未随请求正确发送标头。你知道为什么吗?【参考方案2】:

这是我的 Strapi 路由配置中的一个错误。答案是通过非常有用的 Strapi 论坛提供的: 403 forbidden when calling custom controller from Nuxt

问题来了:


  "method": "GET",
  "path": "/routines/:id",
  "handler": "routine.findOne",
  "config": 
    "policies": []
  
,

  "method": "GET",
  "path": "/routines/me",
  "handler": "routine.me",
  "config": 
    "policies": []
  

所以基本上你现在正在走第一条路线,它假设 我实际上是一个:id。 Koa 正在使用正则表达式进行验证,因此在这种情况下,它采用第一个匹配的路线。将带有 /me 的路线移到带有 /:id 的路线上方

【讨论】:

以上是关于Strapi / Nuxt - 找不到自定义路线的主要内容,如果未能解决你的问题,请参考以下文章

Strapi 自定义路由重定向到公共目录

包含的自定义过滤器-strapi

Strapi - 如何使用自定义属性扩展 graphql 类型模式?

如何使用 Strapi 在 GraphQL 中添加自定义查询?

为啥连接测试失败?

通过 slug 获取页面和页面数据。 Strapi 和 Nuxt