我在Middleware.json中以以下方式在Strongloop中配置了我的中间件:
{
"initial:before": {
"loopback#favicon": {}
},
"initial": {
"compression": {},
"cors": {
"params": {
"origin": true,
"credentials": true,
"maxAge": 86400
}
},
"helmet#xssFilter": {},
"helmet#frameguard": {
"params": [
"deny"
]
},
"helmet#hsts": {
"params": {
"maxAge": 0,
"includeSubdomains": true
}
},
"helmet#hidePoweredBy": {},
"helmet#ieNoOpen": {},
"helmet#noSniff": {},
"helmet#noCache": {
"enabled": false
},
"express-jwt": {
"paths": [
"${restApiRoot}"
],
"params": {
"secret": "secret"
}
}
},
"session": {},
"auth": {
"./middleware/token-validation": {
"paths": [
"${restApiRoot}"
]
}
},
"parse": {},
"routes": {
"loopback#rest": {
"paths": [
"${restApiRoot}"
]
}
},
"files": {},
"final": {
"loopback#urlNotFound": {}
},
"final:after": {
"loopback#errorHandler": {}
}
}
该文件由Strongloop生成,但手动添加了“ auth”中间件。在此中间件(token-validation.js)中,我想像这样访问currentContext:
return function tokenValidation(req, res, next) {
var app = req.app;
var ctx = app.loopback.getCurrentContext();
console.log(ctx);
});
但是,ctx对象始终为null。...有什么想法吗?
步骤1:在config.json中,您需要启用enableHttpContext
"remoting": {
"context": {
"enableHttpContext": true
}
步骤2:在app.start()之前的sever.js中添加以下代码;
app.use(loopback.token()); // this calls getCurrentContext
app.use(loopback.context()); // the context is started here
app.use(function (req, res, next) {
if (!req.accessToken) return next();
// your user model.js
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.'));
res.locals.currentUser = user;
var loopbackContext = loopback.getCurrentContext();
console.log('SERVER CTX?' +loopbackContext);
if (loopbackContext) loopbackContext.set('currentUser', user);
next();
});
});
步骤3:将此代码添加到model.js或任何js中。
var loopback = require('loopback');
var ctx = loopback.getCurrentContext();
var currentUser = ctx && ctx.get('currentUser');
console.log('currentUser.username: ', currentUser);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句