You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Strapi v3.6.8获取User关联CarModel及自定义端点403问题咨询

问题排查与解答

1. 403错误的原因

  • 路由配置格式错误:你提供的routes.json内容缺少外层的routes数组包裹,属于不完整的JSON结构,导致Strapi没有正确注册该路由,权限校验失败返回403。
  • 策略引用错误:你自定义的策略文件名为is-authenticated.js,但路由中配置的策略名是policies.isAuthenticated,全局策略的正确引用格式为global::is-authenticated,引用错误导致权限校验无法通过。另外你不需要额外自定义登录校验策略,Strapi内置了plugins::users-permissions.isAuthenticated策略可以直接使用。
  • 控制器逻辑错误:你代码中取用户ID的方式错误,当前登录用户ID存储在ctx.state.user.id而非ctx.id,同时查询完成后没有给ctx.body赋值就调用了await next(),会直接走到后续404中间件,也会导致响应异常。

2. 实现思路合理性

你的思路是合理的,通过extensions目录扩展内置的users-permissions插件功能,是Strapi v3官方推荐的修改内置插件逻辑的方案,不存在问题,只是代码细节出现了错误。

3. 正确实现方案

步骤1:修正路由配置

将extensions/users-permissions/config/routes.json修改为完整的合法结构:

{
  "routes": [
    {
      "method": "GET",
      "path": "/users/currentUser",
      "handler": "User.currentUser",
      "config": {
        "policies": ["plugins::users-permissions.isAuthenticated"]
      }
    }
  ]
}

步骤2:删除冗余的自定义策略

删掉你在config/policies下创建的is-authenticated.js,直接使用Strapi内置的登录校验策略即可。

步骤3:修正控制器逻辑

修改extensions/users-permissions/controllers/User.js代码如下:

const { sanitizeEntity } = require('strapi-utils');

module.exports = {
  currentUser: async (ctx) => {
    // 获取当前登录用户ID
    const userId = ctx.state.user.id;
    // 查询用户及关联数据,第二个参数填User模型中定义的CarModel关联属性名
    const user = await strapi.query('user', 'users-permissions').findOne(
      { id: userId },
      ['carModels'] // 注意替换为你实际定义的关联字段名
    );
    // 脱敏处理敏感字段
    const sanitizedUser = sanitizeEntity(user, {
      model: strapi.query('user', 'users-permissions').model,
    });
    // 返回结果
    ctx.body = sanitizedUser;
  }
};

额外问题解答

为什么/auth/local返回关联数据,/users/me不返回?

这是Strapi v3的默认设计:登录接口/auth/local的实现逻辑默认会填充所有关联字段返回,而/users/me接口默认只返回用户基础字段不填充关联,目的是默认减少敏感数据泄露的风险,属于安全特性。

能不能用/auth/local替代/users/me?

绝对不可以。/auth/local是登录接口,每次调用需要传入账号密码,前端不可能存储用户明文账号密码重复调用该接口,既存在严重的安全隐患,也不符合接口的设计用途。
另外你提到的修改/users/me不被推荐的说法是错误的,只要通过extensions扩展的方式覆写me方法,属于官方允许的操作,和你自定义currentUser接口的逻辑完全一致。

内容的提问来源于stack exchange,提问作者derelektrischemoench

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:06:03