我正在为我的应用程序使用环回的内置用户模型。我想要完成的是,特定模型条目(例如一篇文章)的作者在保存时自动保存到由访问 token 标识的模型中。
我试图通过使用关系管理器来实现这一点,但内置的用户模型并未在此处列出。
在查询所有文章时,我希望用户名可用于在概览中显示它,但前提是当前用户已通过身份验证。
** 更新 **
经过相当多的研究,我至少找到了一种将当前用户添加到环回上下文的方法:
// 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();
});
});
现在我尝试通过混合添加用户:
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 .
最佳答案
我知道这个问题很老,但这可能对某些人有帮助
在 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();
});
关于javascript - 如何在保存时自动将当前用户添加到模型中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35277405/