en cuanto a la parte 3, puedes usar diversa variantes, pero en general es lo mismo
en la segunda parte si es importante darle al usuario los determinados intentos, pero debes evitar (en lo posible) mostrar si el usuario existe, ¿porque?, porque es más fácil para un malintencionado vulnerar o adivinar la contraseña de un usuario,
sabiendo que efectivamente el usuario existe, además si es un spam robot, si éste genera miles de combinaciones de diferentes usuarios y password y tú solo bloqueas los intentos en el segundo paso, pues es probable que no llegue a ese paso, entonces debes de implementar el bloqueo de la IP en el primer paso, o usar un captcha para mayor seguridad