login() is now async