我正在为我的应用程序使用内置的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。
答案 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