my_auth.py: from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist from social_auth.exceptions import AuthException from django.contrib.auth.models import User def associate_by_username(details, user=None, *args, **kwargs): """Return user entry with same email address as one returned on details.""" if user: return None username = details.get('username') if username: try: return {'user': User.objects.get(username=username)} except MultipleObjectsReturned: raise AuthException(kwargs['backend'], 'Not unique email address.') except ObjectDoesNotExist: pass settings.py: ... SOCIAL_AUTH_PIPELINE = ( 'social_auth.backends.pipeline.social.social_auth_user', 'my_app.my_auth.associate_by_username', 'social_auth.backends.pipeline.user.get_username', 'social_auth.backends.pipeline.user.create_user', 'social_auth.backends.pipeline.social.associate_user', 'social_auth.backends.pipeline.social.load_extra_data', 'social_auth.backends.pipeline.user.update_user_details', ) ... Usage: 1. Lookup UserSocialAuth.objects.filter(uid=target_facebook_id) 2. Registration User(username=target_username)