@harmonyjs/controller-auth-jwt
Version:
Authentication controller for Harmony using JWT
49 lines (48 loc) • 1.81 kB
JavaScript
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;