You do the slow (bcrypt, argon2 or whatever) hash in the browser, and then the server can do the hyper-fast hash (SHA256).
You can still flood the server, but you're flooding it with things that take microseconds to compute, instead of 50ms.
You can still flood the server, but you're flooding it with things that take microseconds to compute, instead of 50ms.
Requiring client-side JavaScript for your login system seems fraught. I would much rather have an approach that does server side hashing exclusively, but gates it behind some kind of DDoS protection or rate-limiting.