Tava revendo aqui e acho que é o seguinte:
Ao ser rodado a primeira coisa que o seu código fará é o prompt do login e da senha, certo?
Em seguida ele faria a verificação contra a informação cadastrada, através do seu if que estava fora/antes do while, certo? Se o if retornasse true, o programa entraria no while, porém não haveria mais propmpt pra ele fazer, então ele ficava repetindo o while ad eternamente, já que a função não receberia a variável que já deu true antes de entrar no while.
Penso que seja isso.