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!
});
由于
答案 0 :(得分:0)
这不是PostgreSQL特有的,但它是一个bug。 https://github.com/strongloop/loopback/issues/878#issuecomment-128417677
答案 1 :(得分:0)
我知道这个问题已经过时了,但这可能对某些人有所帮助
在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();
});
};