We come up against this periodically and I believe a standard solution is to make another app to support the other details that you would like, such as contact details. I would hazard to guess that 'django.contrib.auth' is intentionally left simple because additional details that might be required by diff projects vary so wildly. This the 'pythony' way to do it. I don't have
James Bennetts'* book handy but IIRC there is a bit at the beginning about how it's better to have lots of elegant and dedicated apps than fewer big and all-over-the-place ones.
Then whatever additional details are associated with the 'User' can be used wherever and whenever necessary by clever use of
magical powers query relationships (
http://docs.djangoproject.com/en/dev/topics/db/queries/#related-objects).
Option AYou can make a simple app (which for the record I did the first time). This can be very small and simple and only needs to contain:
user = models.ForeignKey(User,)
email = models.EmailField()
Seriously.
Option BYou can get one of the incredible and elaborate ones that have been made by people who've already been interested in similar things and gone all out eg
http://code.google.com/p/django-profile/ (this is what I'm more prone to doing now). IIRC the washington post one is mental also. Actually it's interesting to do this to pull down and have a look to see how they've handled it.
Hopefully this relates, even vaguely, to what you asked?
Regard,
Elena
*for the record this talk is good and well worth a watch if you haven't seen it.
Also, if you haven't seen it, per Russell Keith-Maggee's advice this is a must-see:
Cal Henderson delivers keynote address: "Why I Hate Django" www.djangocon.org