通常,登录用户会获取内容类型的所有条目。
我创建了一个“片段”内容类型(_id,name,content,users<<->>snippets)
<<->>
表示“具有并属于许多”关系。
我创建了一些测试用户并提出请求:
curl -H 'Authorization: Bearer eyJ...' http://localhost:1337/snippets/
主要问题:经过身份验证的用户应该只能看到分配给他的条目。相反,登录用户会获取所有片段,这很糟糕。
怎么可能修改fetchAll(ctx.query);
查询考虑到这一点,所以它会做类似的事情fetchAll(ctx.state.user.id);
at the /
-路线->find
-方法 ?
基本的查找方法在这里:
find: async (ctx) => {
if (ctx.query._q) {
return strapi.services.snippet.search(ctx.query);
} else {
return strapi.services.snippet.fetchAll(ctx.query);
}
},
子问题:当我进行不记名令牌身份验证时,strapi 是否知道哪个用户已登录?
您可以在片段配置下设置 /snippets/me 路由。
该路由可以调用 Snippets.me 控制器方法,该方法将检查用户,然后根据用户查询片段。
So in api/snippet/config/routes.json
会有类似的东西:
{
"method": "GET",
"path": "/snippets/me",
"handler": "Snippets.me",
"config": {
"policies": []
}
},
然后在控制器中(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);
},
然后,您将向经过身份验证的用户授予我路由的权限,而不是整个片段路由的权限。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)