@harmonyjs/controller-auth-session
Version:
Authentication controller for Harmony using Session
41 lines (40 loc) • 1.7 kB
JavaScript
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;