pennersr/django-allauth is an excellent authentication package providing most of the required functionalities. It provided the following functionalities,
Signup of both local and social accounts
Connecting more than one social account to a local account
Disconnecting a social account -- requires setting a password if only the local account remains
Optional instant-signup for social accounts -- no questions asked
E-mail address management (multiple e-mail addresses, setting a primary)
Password forgotten flow
E-mail address verification flow
Details
Supports multiple authentication schemes (e.g. login by user name, or by e-mail), as well as multiple strategies for account verification (ranging from none to e-mail verification).
All access tokens are consistently stored so that you can publish wall updates etc.
Pluggable signup form for asking additional questions during signup.
Support for connecting multiple social accounts to a Django user account.
The required consumer keys and secrets for interacting with Facebook, Twitter and the likes are to be configured in the database via the Django admin using the SocialApp model.
Consumer keys, tokens make use of the Django sites framework. This is especially helpful for larger multi-domain projects, but also allows for for easy switching between a development (localhost) and production setup without messing with your settings and database.
Improve user registration and login process by allowing either user name or email as user name.
Add an option to verify using 3rd party services. Discussion needed about this.