Depois de uns dias de luta, não consegui resolver aí mudei o cenário inteiro. Dando uma pesquisada acabei encontrando o Clerk https://clerk.com/ Eles proveem todo um sistema de autenticação com fatores de verificação nativamente e é super simples de implementar, tanto que na plataforma deles tem um vídeo mostrando como fazer a implementação num projeto em 2 minutos, sem falar que eles possuem um plano gratuito que aceita até 5k cadastros na base. Acabou que migramos toda a parte de sign-in/sign-up pro Clark e refatoramos algumas funções de protected routes.
Já ouvi ótimos comentários do Clerk, acredito que tenha feito uma boa escolha. Você comentou que esse projeto tem back e front separados, mesmo assim eu recomendo o Supabase como opção para esses casos também, ele abstrai (além de várias outras coisas) o processo de autenticação.