如何在“保存前”操作挂钩中获取当前用户?

时间:2015-06-04 06:53:50

标签: node.js loopbackjs strongloop

loopback.getCurrentContext()对我来说是空的。为什么?我需要从上下文中获取当前用户。操作钩子的ctx不是同一个上下文,并且根据我的意思不包含我需要的内容。

Customer.observe('before save', function checkPermission(ctx, next) {

  //do I have a loopback context that works?
  var context = loopback.getCurrentContext();
  console.log("context is: " + context);//null!
});

由于

3 个答案:

答案 0 :(得分:0)

这不是PostgreSQL特有的,但它是一个bug。 https://github.com/strongloop/loopback/issues/878#issuecomment-128417677

答案 1 :(得分:0)

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

根据loopback doc enter image description here

  

在LoopBack 2.x中,出于兼容性原因,默认情况下禁用此功能。要启用,请添加

首先,您需要将此添加到您的客户模型

"injectOptionsFromRemoteContext": true

然后:

Customer.observe('before save', function checkPermission(ctx, next) {
  //ctx.options returns tokenid, userid & ttl
  console.log(ctx.options);
  return next();
});

答案 2 :(得分:-4)

我认为您应该add a pre-processing middleware使用当前用户填充上下文。

<强> /server/server.js

app.use(loopback.context());
app.use(loopback.token());

app.use(function setCurrentUser(req, res, next) {
    if (!req.accessToken) {
        return next();
    }
    app.models.Customer.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();
     });
});

<强> /common/models/customer.js

var loopback = require('loopback');
module.exports = function(Customer) {
    Customer.observe('before save', function checkPermission(ctx, next) {

        var context = loopback.getCurrentContext();
        var currentUser = context && context.get('currentUser');
        console.log(currentUser);

        next();
    });
};