Algunas cosas rápidas que vienen a la mente:
¿Cuál es el método de entrada? Si el usuario ingresa la contraseña en el "chatbox", corre el riesgo de que alguien simplemente esté mirando por encima del hombro del usuario y vea la contraseña.
¿Estará utilizando la limitación de velocidad? Los mensajes SMS, aunque son muy baratos, no son gratuitos para enviar. No quiere pagar la factura cuando Joe decide enviar diez mil mensajes de restablecimiento de contraseña a Carl. También necesitarás entradas de límite de velocidad, para evitar que alguien brute forzando todas las combinaciones posibles. Asegúrate de hacer esto tanto por nombre de usuario como por IP.
Sobre ese tema, deberás tener un código de autenticación bastante largo: la mayoría de los sitios 2FA usan 2FA como un método de copia de seguridad de autenticación, no las "claves del reino". Ya que confía en gran medida en el código generado por el servidor, deberá asegurarse de que sea lo suficientemente largo como para hacer inviable la fuerza bruta distribuida.
Tendrá que asegurarse de explicar qué es el mensaje, en el cuerpo del mensaje. Por ejemplo, "Su código de restablecimiento de la contraseña de WidgetCo es: 123456": de esta manera, las personas pueden saber que están siendo atacadas, en lugar de obtener un montón de números aleatorios sobre el texto (aunque como no hay otra autenticación, los usuarios pueden ' No hagas mucho incluso si saben que están bajo ataque).
Finalmente, ten en cuenta que también estás a merced de la seguridad de los operadores de telefonía móvil: todo esto no sirve para nada si puedo llamar a Verizon e ingeniero social para que me digan el texto.
En general, no estoy seguro de que esta sea una gran idea: usar un correo electrónico para la recuperación (con 2FA) tendría más sentido, y usar OAuth sería mucho más seguro, aunque sería un dolor de cabeza mucho menor para usted.