json-server-auth Angular受保护路由失效问题求助
排查json-server-auth中posts路由660权限规则失效问题
问题描述
在Angular项目中使用json-server-auth时,为posts路由配置了代表「用户必须拥有资源才能读写」的660权限规则,但在Postman中无需携带Authorization头(Bearer+accessToken)即可直接访问该路由获取数据。
当前配置文件
db.json
{ "users": [ {"email": "olivier@mail.com", "password": "$2a$10$t7tcm61VhhmWnk5U1oWN0.6SF4/.DUZuSKqBNqt06/mVnGYijmLO6", "id": 1}, {"email": "wtf@mail.com", "password": "$2a$10$2clz7R/P7hq41RLcg6P.2.PB3yzlJ.q/i47vQpEw0UCYjURk0owiK", "id": 2} ], "posts": [ {"title": "Anther post title.", "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", "id": 1}, {"title": "Dolore magna aliqua.", "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", "id": 2} ] }
routes.json
{ "users": 400, "posts": 660 }
排查要点
- 检查posts资源的用户关联字段:660权限规则要求每个post必须包含
userId字段,关联到users表中的用户ID。当前db.json的posts没有该字段,json-server-auth无法判断资源归属,会默认开放访问。需要给每个post添加对应userId,比如:"posts": [ {"title": "Anther post title.", "content": "...", "id": 1, "userId": 1}, {"title": "Dolore magna aliqua.", "content": "...", "id": 2, "userId": 2} ] - 确认启动命令加载routes.json:启动json-server-auth时必须通过
--routes参数指定配置文件,否则routes.json不会生效。正确启动命令示例:json-server --watch db.json --middlewares ./node_modules/json-server-auth/dist/index.js --routes routes.json - 验证权限规则的作用范围:660规则对列表请求(
GET /posts)和单个资源请求(GET /posts/1)的逻辑不同——列表请求会返回当前用户拥有的posts,未登录时应返回空数组而非所有数据;单个资源请求未登录时应返回403。可分别测试这两种请求,确认是否符合预期。 - 检查json-server-auth版本兼容性:不同版本的权限规则解析逻辑可能有差异,建议升级到最新稳定版,避免版本bug导致的规则失效。
内容的提问来源于stack exchange,提问作者king
相关产品推荐
相关产品推荐

