Because returning a user would mean that the answer was ambiguous, since it is both true-ish (yes, there's a user at that name) and false (no, that's not the right password for that user) at the same time. I can see why the decision was made to do things that way, since if authentication fails, you want to return false, not user, since user is apparently the signature of a successful login. In at least two authentication frameworks I have looked at, the authors are very clear about the sort of "no-answer" they give if you fail to log in. They don't say which was wrong -- username or password -- so that there's less evidence to go on in a dictionary attack.