Some libraries, like
django-rest-framework-jwt, call django.contrib.auth.authenticate, but not django.contrib.auth.login, to implement their custom authentication system. Thus, to make customizing these kinds of auth systems easier, I'd think it would be reasonable that authenticate() emit a signal. It could even emit the django.contrib.auth.signals.user_logged_in signal under a different name.