Merge pull request #775 from strongloop/feature/save-token-in-context
middleware/token: store the token in current ctx
This commit is contained in:
commit
46726f969e
|
@ -185,6 +185,11 @@ loopback.template = function(file) {
|
|||
return ejs.compile(str);
|
||||
};
|
||||
|
||||
loopback.getCurrentContext = function() {
|
||||
// A placeholder method, see lib/middleware/context.js for the real version
|
||||
return null;
|
||||
};
|
||||
|
||||
/*!
|
||||
* Built in models / services
|
||||
*/
|
||||
|
|
|
@ -16,7 +16,7 @@ function createContext(scope) {
|
|||
process.context[scope] = ns;
|
||||
// Set up loopback.getCurrentContext()
|
||||
loopback.getCurrentContext = function() {
|
||||
return ns;
|
||||
return ns && ns.active ? ns : null;
|
||||
};
|
||||
|
||||
chain(juggler);
|
||||
|
|
|
@ -52,6 +52,8 @@ function token(options) {
|
|||
if (req.accessToken !== undefined) return next();
|
||||
TokenModel.findForRequest(req, options, function(err, token) {
|
||||
req.accessToken = token || null;
|
||||
var ctx = loopback.getCurrentContext();
|
||||
if (ctx) ctx.set('accessToken', token);
|
||||
next(err);
|
||||
});
|
||||
};
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
},
|
||||
"devDependencies": {
|
||||
"browserify": "~4.2.3",
|
||||
"chai": "~1.9.1",
|
||||
"chai": "^1.10.0",
|
||||
"cookie-parser": "~1.3.3",
|
||||
"errorhandler": "~1.2.0",
|
||||
"es5-shim": "^4.0.3",
|
||||
|
|
|
@ -143,6 +143,36 @@ describe('app.enableAuth()', function() {
|
|||
.end(done);
|
||||
});
|
||||
|
||||
it('stores token in the context', function(done) {
|
||||
var TestModel = loopback.createModel('TestModel', { base: 'Model' });
|
||||
TestModel.getToken = function(cb) {
|
||||
cb(null, loopback.getCurrentContext().get('accessToken') || null);
|
||||
};
|
||||
TestModel.remoteMethod('getToken', {
|
||||
returns: { arg: 'token', type: 'object' },
|
||||
http: { verb: 'GET', path: '/token' }
|
||||
});
|
||||
|
||||
var app = loopback();
|
||||
app.model(TestModel, { dataSource: null });
|
||||
|
||||
app.enableAuth();
|
||||
app.use(loopback.context());
|
||||
app.use(loopback.token({ model: Token }));
|
||||
app.use(loopback.rest());
|
||||
|
||||
var token = this.token;
|
||||
request(app)
|
||||
.get('/TestModels/token?_format=json')
|
||||
.set('authorization', token.id)
|
||||
.expect(200)
|
||||
.expect('Content-Type', /json/)
|
||||
.end(function(err, res) {
|
||||
if (err) return done(err);
|
||||
expect(res.body.token.id).to.eql(token.id);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function createTestingToken(done) {
|
||||
|
|
|
@ -20,6 +20,10 @@ describe('loopback', function() {
|
|||
expect(require('fs').existsSync(loopback.faviconFile), 'file exists')
|
||||
.to.equal(true);
|
||||
});
|
||||
|
||||
it.onServer('has `getCurrentContext` method', function() {
|
||||
expect(loopback.getCurrentContext).to.be.a('function');
|
||||
});
|
||||
});
|
||||
|
||||
describe('loopback.createDataSource(options)', function() {
|
||||
|
|
Loading…
Reference in New Issue