如何在保存时自动将当前用户添加到模型?

时间:2016-02-08 19:11:02

标签: javascript node.js loopbackjs angular-loopback

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

我试图通过使用关系管理器来实现这一点,但是那里没有列出内置用户模型。

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

** 更新 **

经过一番研究后,我发现至少有一种方法可以将当前用户添加到loopback-context中:

// 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();
  });
};

我还开了issue on github

2 个答案:

答案 0 :(得分:3)

我知道这个问题已经过时了,但这可能对某些人有所帮助

在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();
});

答案 1 :(得分:-2)

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

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