gpt4 book ai didi

koa - 绑架-限制用户仅获取与他有关的数据

转载 作者:行者123 更新时间:2023-12-03 17:44:19 25 4
gpt4 key购买 nike

通常,登录用户会获得内容类型的所有条目。

我创建了一个“代码段”内容类型(_id,name,content,users<<->>snippets)<<->>表示“具有并属于许多”关系。

我创建了一些测试用户并提出了一个请求:
curl -H 'Authorization: Bearer eyJ...' http://localhost:1337/snippets/

主要问题:通过身份验证的用户应只看到分配给他的条目。而是,已登录的用户会获取所有摘要,这很糟糕。

如何修改fetchAll(ctx.query);查询以将其考虑在内,以便在fetchAll(ctx.state.user.id); -route-> / -method上执行类似于find的操作?

基本的查找方法在这里:

find: async (ctx) => {

if (ctx.query._q) {
return strapi.services.snippet.search(ctx.query);
} else {
return strapi.services.snippet.fetchAll(ctx.query);
}
},

子问题:当我进行Bearer-Token身份验证时,tradi甚至不知道登录了哪个用户?

最佳答案

您可以在代码片段配置下设置/snippets/me路由。

该路由可以调用Snippets.me Controller 方法,该方法将检查用户,然后根据用户查询代码段。

因此,在api/snippet/config/routes.json中将有类似以下内容:

    {
"method": "GET",
"path": "/snippets/me",
"handler": "Snippets.me",
"config": {
"policies": []
}
},

然后,在 Controller ( api/snippet/controllers/Snippet.js)中,您可以执行以下操作:
  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.snippet.fetch({user:user.id});

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

ctx.send(data);
},

然后,您将向身份验证的用户授予对me路由的权限,而不是对整个代码段路由的权限。

关于koa - 绑架-限制用户仅获取与他有关的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53265503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com