AuthAlreadyAssociated at /complete/*/ This * account is already in use

AuthAlreadyAssociated at /complete/*/ This * account is already in use

If an already logged-in user will try to start a social auth workflow you will notice this error.

One of the approaches how to overcome this and perform login event if auth already associated is overwriting do_complete function.

The disadvantage of this method that we will import some staff from python-social-auth internals, so our code may be broken after the new version release.

This one tested on python-social-auth==0.3.6 and social-app-django==2.0.0

Define view:

from django.views.decorators.cache import never_cache
from django.views.decorators.csrf import csrf_exempt
from social_core.actions import do_complete
from social_django.utils import psa
from social_django.views import NAMESPACE, _do_login
from django.contrib.auth import REDIRECT_FIELD_NAME
...

@never_cache
@csrf_exempt
@psa('{0}:complete'.format(NAMESPACE))
def complete(request, backend, *args, **kwargs):
    """Authentication complete view"""
    return do_complete(request.backend, _do_login, user=None,
                       redirect_name=REDIRECT_FIELD_NAME, request=request,
                       *args, **kwargs)

Add to main urls.py:

from social_django.urls import extra
...

[
   ...
   url(r'^complete/(?P<backend>[^/]+){0}$'.format(extra), complete, name='complete'),
]

Bonus

How was this done? Just find site-packages\social_django\urls.py and see how '^complete/... url defined. Follow complete view and copy it to your code, then just replace request.user it to None

#django #python-social-auth
1
Ivan Borshchov profile picture
Nov 05, 2017
by Ivan Borshchov
Did it help you?
Yes !
No

Best related

Other by Ivan Borshchov