3

我正在为我的应用程序使用内置的环回用户模型。我想要完成的是,特定模型条目(例如文章)的作者在保存时会自动保存到访问令牌标识的模型中。

我尝试通过使用关系管理器来实现这一点,但内置的用户模型并未在此处列出。

最好在查询所有文章时,我希望用户名可以在概览中显示,但前提是当前用户已通过身份验证。

**更新**

经过相当多的研究,我至少找到了一种将当前用户添加到环回上下文的方法:

// see https://docs.strongloop.com/display/public/LB/Using+current+context
app.use(loopback.context());
app.use(loopback.token());
app.use(function setCurrentUser(req, res, next) {
  console.log(req.accessToken);
  if (!req.accessToken) {
    return next();
  }
  app.models.user.findById(req.accessToken.userId, function (err, user){
    if (err) {
      return next(err);
    }
    if (!user) {
      return next(new Error('No user with this access token was found.'));
    }
    var loopbackContext = loopback.getCurrentContext();
    if (loopbackContext) {
      loopbackContext.set('currentUser', user);
    }
    next();
  });
});

现在我正在尝试通过 mixin 添加用户:

module.exports = function (Model) {
  Model.observe('before save', function event(ctx, next) {
    var user;
    var loopbackContext = loopback.getCurrentContext();
    if (loopbackContext && loopbackContext.active && loopbackContext.active.currentUser) {
      user = loopbackContext.active.currentUser;
      console.log(user);
      if (ctx.instance) {
        ctx.instance.userId = user.id;
      } else {
        ctx.data.userId = user.id;
      }
    }
    next();
  });
};

我还在github 上打开了一个问题

4

2 回答 2

4

我知道这个问题很老,但这可能会对某些人有所帮助

在 LoopBack 2.x 中,您需要将其添加到模型 JSON

"injectOptionsFromRemoteContext": true

然后:

Model.observe('before save', function(ctx, next) {
  if(ctx.instance){
     ctx.instance.userId = ctx.options.accessToken.userId;
  }else if (ctx.data){
     ctx.data.userId = ctx.options.accessToken.userId;
  }
  return next();
});
于 2017-02-26T09:54:18.550 回答
-2

我强烈建议您扩展内置的用户模型,即使您不需要创建任何新属性。使用 arc 控制台扩展或手动创建文件很容易,并且整个身份验证/授权过程将正常工作,无需任何其他额外配置。看看这里:https ://docs.strongloop.com/display/public/LB/Extending+built-in+models

但即便如此,如果您想使用内置模型用户,请确保它保留在数据库中以显示在关系管理器列表中https://docs.strongloop.com/display/public/LB/Creating+database+tables+ for+内置+模型

于 2016-02-09T12:21:47.187 回答