'use strict'; /** * Jwt.js service * * @description: A set of functions similar to controller's actions to avoid code duplication. */ const _ = require('lodash'); const jwt = require('jsonwebtoken'); module.exports = ({ strapi }) => ({ getToken(ctx) { let token; if (ctx.request && ctx.request.header && ctx.request.header.authorization) { const parts = ctx.request.header.authorization.split(/\s+/); if (parts[0].toLowerCase() !== 'bearer' || parts.length !== 2) { return null; } token = parts[1]; } else { return null; } return this.verify(token); }, issue(payload, jwtOptions = {}) { _.defaults(jwtOptions, strapi.config.get('plugin::users-permissions.jwt')); return jwt.sign( _.clone(payload.toJSON ? payload.toJSON() : payload), strapi.config.get('plugin::users-permissions.jwtSecret'), jwtOptions ); }, verify(token) { return new Promise((resolve, reject) => { jwt.verify( token, strapi.config.get('plugin::users-permissions.jwtSecret'), {}, (err, tokenPayload = {}) => { if (err) { return reject(new Error('Invalid token.')); } resolve(tokenPayload); } ); }); }, });