I wanted to get the current user in a remote method. I'm using passport for login right now (mostly copied from example)
Everything worked fine and I could login and stuff, but just getting context to work is a problem.
If anyone knows how to do this that would be awesome! I have been searching for hours...
I'm writing in coffeescript but I converted to JS so that all users can read it properly ;)
var app, boot, flash, loopback;
require('./global');
loopback = require('loopback');
boot = require('loopback-boot');
app = module.exports = loopback();
flash = require('express-flash');
global.app = app;
app.use(flash());
require('./passport').beforeBoot(app);
app.use(loopback.context());
app.use(loopback.token({
model: 'accessToken'
}));
app.use(function(req, res, next) {
if (!req.accessToken) {
return next();
}
app.models.UserModel.findById(req.accessToken.userId, function(err, user) {
var loopbackContext;
log('user', user);
if (err) {
return next(err);
}
if (!user) {
return next(new Error('No user with this access token was found.'));
}
loopbackContext = loopback.getCurrentContext();
if (loopbackContext) {
loopbackContext.set('currentUser', user);
}
next();
});
});
app.use(function(req, res, next) {
res.header("X-Powered-By", "Blood, sweat, and tears");
return next();
});
require('loopback-ds-readonly-mixin')(app);
boot(app, __dirname);
require('./passport').afterBoot(app);
app.start = function() {
return app.listen(function() {
app.emit('started');
console.log('Web server listening at: %s', app.get('url'));
});
};
app.get('/login', function(req, res, next) {
res.send({});
});
app.get('/auth/logout', function(req, res, next) {
req.logout();
res.redirect('/');
});
app.start();
var PassportConfigurator, ensureLoggedIn, loopbackPassport, passportConfigurator;
loopbackPassport = null;
PassportConfigurator = null;
passportConfigurator = null;
ensureLoggedIn = null;
module.exports = {
beforeBoot: function(app) {
var c, config, err, s;
loopbackPassport = require('loopback-component-passport');
PassportConfigurator = loopbackPassport.PassportConfigurator;
passportConfigurator = new PassportConfigurator(app);
ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn;
passportConfigurator.init();
config = {};
try {
config = require('../providers.json');
} catch (_error) {
err = _error;
console.trace(err);
process.exit(1);
}
for (s in config) {
c = config[s];
c.session = c.session !== false;
passportConfigurator.configureProvider(s, c);
}
return app.get('/auth/account', ensureLoggedIn('/login'), function(req, res, next) {});
},
afterBoot: function(app) {
return passportConfigurator.setupModels({
userModel: app.models.user,
userIdentityModel: app.models.userIdentity,
userCredentialModel: app.models.userCredential
});
}
};
// ---
// generated by coffee-script 1.9.2