application.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. 'use strict';
  2. const koajwt = require('koa-jwt2');
  3. const UnauthorizedError = require('koa-jwt2/lib/errors/UnauthorizedError');
  4. const jwt = require('jsonwebtoken');
  5. const JWT = Symbol('Application#jwt');
  6. module.exports = {
  7. get jwt() {
  8. if (!this[JWT]) {
  9. const config = this.config.jwt;
  10. this[JWT] = koajwt(config);
  11. this[JWT].sign = (payload, secret, options, callback) => {
  12. if (typeof secret !== 'string') {
  13. callback = options;
  14. options = secret || {};
  15. secret = config.secret;
  16. } else if (typeof options === 'function') {
  17. callback = options;
  18. options = {};
  19. }
  20. return jwt.sign(
  21. payload,
  22. secret,
  23. Object.assign({}, config.sign || {}, options),
  24. callback
  25. );
  26. };
  27. this[JWT].verify = (token, secret, options, callback) => {
  28. if (typeof secret !== 'string') {
  29. callback = options;
  30. options = secret || {};
  31. secret = config.secret;
  32. } else if (typeof options === 'function') {
  33. callback = options;
  34. options = {};
  35. }
  36. return jwt.verify(
  37. token,
  38. secret,
  39. Object.assign({}, config.verify || {}, options),
  40. callback
  41. );
  42. };
  43. this[JWT].decode = jwt.decode;
  44. this[JWT].UnauthorizedError = UnauthorizedError;
  45. }
  46. return this[JWT];
  47. },
  48. };