UNPKG

@harmonyjs/controller-auth-jwt

Version:

Authentication controller for Harmony using JWT

49 lines (48 loc) 1.81 kB
import FastifyJWT from 'fastify-jwt'; import 'fastify-cookie'; const ControllerAuthenticationJWT = (configuration) => ({ name: 'ControllerAuthenticationJWT', global: true, async initialize({ server, logger, }) { const { secret } = configuration; if (!secret) { logger.warn('Please avoid using the default secret for authentication.'); logger.warn('Provide your own secret through AuthenticationJWTConfig::secret'); } await server.register(FastifyJWT, { sign: { algorithm: 'HS256' }, ...configuration, secret: secret || 'harmony', cookie: configuration.cookie, }); await server.decorate(ControllerAuthenticationJWT.validator, { block: async (request, reply) => { try { await request.jwtVerify(); } catch (err) { reply.send(err); } }, try: async (request) => { try { await request.jwtVerify(); } catch (err) { // Ignore, just decoding } }, get: (request) => request.user, create: (request, reply, payload, opts) => { const token = server.jwt.sign(payload, opts); if (configuration.cookie && configuration.cookie.cookieName) { reply.setCookie(configuration.cookie.cookieName, token, configuration.cookie); } return token; }, }); logger.info('Authentication system initialized'); }, }); ControllerAuthenticationJWT.validator = 'jwtAuthenticate'; export default ControllerAuthenticationJWT;