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

Loopback 3.0+MongoDB:无法找到扩展的appUser用户问题求助

在LoopBack 3.0中访问并修改当前登录的appUser

嘿,我来帮你搞定在自定义REST方法里操作当前登录用户的需求!结合你已经扩展了User为appUser且Token关联正确的前提,咱们一步步来:

1. 给自定义方法启用认证并注入当前用户

首先得确保只有登录用户能调用你的自定义方法,同时让LoopBack自动把当前用户实例传递过来。直接看代码示例:

module.exports = function(appUser) {
  // 定义修改自身信息的自定义方法
  appUser.updateOwnProfile = async function(currentUser, updateData, cb) {
    try {
      // 把要更新的字段合并到当前用户实例
      Object.assign(currentUser, updateData);
      // 保存修改到MongoDB
      const updatedUser = await currentUser.save();
      cb(null, updatedUser);
    } catch (err) {
      cb(err);
    }
  };

  // 配置远程方法的元数据
  appUser.remoteMethod('updateOwnProfile', {
    accepts: [
      // 自动注入当前登录的appUser实例
      {arg: 'currentUser', type: 'appUser', http: {source: 'user'}, required: true},
      // 接收前端传来的修改数据
      {arg: 'updateData', type: 'object', http: {source: 'body'}, required: true}
    ],
    returns: {arg: 'user', type: 'appUser', root: true},
    http: {path: '/update-own-profile', verb: 'patch'},
    // 启用JWT认证,确保只有登录用户能访问
    auth: {strategy: 'jwt'}
  });
};

2. 手动获取用户的备选方案

如果上面的自动注入没生效(比如配置遗漏),你也可以通过请求里的AccessToken手动查询用户:

appUser.updateOwnProfile = async function(cb) {
  const accessToken = this.req.accessToken;
  if (!accessToken) {
    return cb(new Error('用户未登录,请先登录'));
  }

  try {
    // 通过Token里的userId查询当前appUser
    const currentUser = await appUser.findById(accessToken.userId);
    // 直接修改你的自定义字段,比如ge
    currentUser.ge = '新的地理位置信息';
    const updatedUser = await currentUser.save();
    cb(null, updatedUser);
  } catch (err) {
    cb(err);
  }
};

3. 再确认Token模型的关联配置

你已经修改了Token指向appUser,再检查下AccessToken模型的定义是否正确,确保关联的是你的自定义用户模型:

{
  "name": "AccessToken",
  "base": "AccessToken",
  "relations": {
    "user": {
      "type": "belongsTo",
      "model": "appUser",
      "foreignKey": "userId"
    }
  }
}

4. 测试接口

调用这个接口时,记得在请求头里带上登录时拿到的Token:Authorization: Bearer <你的Token字符串>,然后在请求体里传入要修改的字段(比如{"ge": "上海浦东新区"}),就能成功修改当前登录用户的信息啦!

内容的提问来源于stack exchange,提问作者Tu.Ma.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:38:50