Skip to content

Commit 7254e01

Browse files
committed
Add option to return header and payload when decoding.
1 parent 881d07f commit 7254e01

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

index.js

+13-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var JsonWebTokenError = module.exports.JsonWebTokenError = require('./lib/JsonWe
44
var TokenExpiredError = module.exports.TokenExpiredError = require('./lib/TokenExpiredError');
55

66
module.exports.decode = function (jwt, options) {
7+
options = options || {};
78
var decoded = jws.decode(jwt, options);
89
var payload = decoded && decoded.payload;
910

@@ -12,11 +13,21 @@ module.exports.decode = function (jwt, options) {
1213
try {
1314
var obj = JSON.parse(payload);
1415
if(typeof obj === 'object') {
15-
return obj;
16+
payload = obj;
1617
}
1718
} catch (e) { }
1819
}
19-
20+
21+
//return header if `complete` option is enabled. header includes claims
22+
//such as `kid` and `alg` used to select the key within a JWKS needed to
23+
//verify the signature
24+
if (options.complete === true) {
25+
return {
26+
header: decoded.header,
27+
payload: payload,
28+
signature: decoded.signature
29+
}
30+
}
2031
return payload;
2132
};
2233

test/jwt.rs.tests.js

+10
Original file line numberDiff line numberDiff line change
@@ -275,5 +275,15 @@ describe('RS256', function() {
275275
assert.deepEqual(payload, obj);
276276
done();
277277
});
278+
it('should return the header and payload and signature if complete option is set', function(done) {
279+
var obj = { foo: 'bar' };
280+
var token = jwt.sign(obj, priv, { algorithm: 'RS256' });
281+
var decoded = jwt.decode(token, { complete: true });
282+
console.log(decoded);
283+
assert.deepEqual(decoded.payload, obj);
284+
assert.deepEqual(decoded.header, { typ: 'JWT', alg: 'RS256' });
285+
assert.ok(typeof decoded.signature == 'string');
286+
done();
287+
});
278288
});
279289
});

0 commit comments

Comments
 (0)