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)
