UNPKG

typescript-express-starter

Version:
43 lines (34 loc) 1.29 kB
import { verify } from 'jsonwebtoken'; import { AuthChecker } from 'type-graphql'; import { getRepository } from 'typeorm'; import { SECRET_KEY } from '@config'; import { UserEntity } from '@entities/users.entity'; import { HttpException } from '@exceptions/httpException'; import { RequestWithUser, DataStoredInToken } from '@interfaces/auth.interface'; const getAuthorization = req => { const cookie = req.cookies['Authorization']; if (cookie) return cookie; const header = req.header('Authorization'); if (header) return header.split('Bearer ')[1]; return null; }; export const AuthMiddleware = async req => { try { const Authorization = getAuthorization(req); if (Authorization) { const { id } = verify(Authorization, SECRET_KEY) as DataStoredInToken; const userRepository = getRepository(UserEntity); const findUser = await userRepository.findOne(id, { select: ['id', 'email', 'password'] }); return findUser; } return null; } catch (error) { throw new HttpException(401, 'Wrong authentication token'); } }; export const AuthCheckerMiddleware: AuthChecker<RequestWithUser> = async ({ context: { user } }) => { if (!user) { throw new HttpException(404, 'Authentication token missing'); } return true; };