UNPKG

@harmonyjs/controller-auth-session

Version:

Authentication controller for Harmony using Session

41 lines (40 loc) 1.7 kB
import FastifySession from 'fastify-session'; import MemoryStore from 'memorystore'; import 'fastify-cookie'; import { HttpErrors } from '@harmonyjs/server'; const ControllerAuthenticationSession = (configuration) => ({ name: 'ControllerAuthenticationJWT', global: true, async initialize({ server, logger, }) { const { secret, saveUninitialized, store } = configuration; if (!secret) { logger.warn('Please avoid using the default secret for authentication.'); logger.warn('Provide your own secret through AuthenticationSessionConfig::secret'); } await server.register(FastifySession, { ...configuration, secret: secret || 'harmony-default-auth-session-secret', store: store || new MemoryStore({ checkPeriod: 24 * 60 * 60 * 1000, }), saveUninitialized: saveUninitialized || false, }); await server.decorate(ControllerAuthenticationSession.validator, { block: async (request, reply) => { if (!request.session || !request.session.payload) { reply.send(HttpErrors.Unauthorized('No session found')); } }, try: async () => { // Do nothing }, get: (request) => request.session && request.session.payload, create: (request, reply, payload) => { request.session.payload = payload; }, }); logger.info('Authentication system initialized'); }, }); ControllerAuthenticationSession.validator = 'sessionAuthenticate'; export default ControllerAuthenticationSession;