2013-04-11 7 views
5

Ich habe es erfolgreich geschafft, django-socialauth zu verwenden, um ein Konto (in diesem Fall ein Instagram-Konto) mit einem vorhandenen Benutzerkonto zuzuordnen. Ich habe auch meine Pipeline eingerichtet, um zusätzliche Benutzerdetails zu sammeln:Wie aktualisiere ich die "extra_data" eines Benutzers, nachdem sie mit dem Konto verknüpft wurden?

def update_social_auth(backend, details, response, social_user, uid, user, 
        *args, **kwargs): 

    if getattr(backend, 'name', None) in ('instagram', 'tumblr'): 
     social_user.extra_data['username'] = details.get('username') 

    social_user.save() 

Dies funktioniert hervorragend, wenn ein Konto zum ersten Mal zugeordnet wird. Wenn das Konto jedoch bereits verknüpft wurde, ist das Feld username in extra_data nicht vorhanden.

Wie kann ich die extra_data eines Benutzers aktualisieren, nachdem die Verknüpfung bereits hergestellt wurde? Gibt es eine Möglichkeit, django-socialauth zu verwenden, ohne die Verbindung zu trennen und wiederherzustellen oder die API des Kontos (z. B. Instagram) zu verwenden?

Wenn es hilft, dann ist dies meine Pipeline im Moment:

SOCIAL_AUTH_PIPELINE = (
    'social_auth.backends.pipeline.social.social_auth_user', 
    'social_auth.backends.pipeline.social.associate_user', 
    'social_auth.backends.pipeline.social.load_extra_data', 
    'social_auth.backends.pipeline.user.update_user_details', 
    'apps.utils.social.utils.update_social_auth' 
) 

Antwort

0

Hier ist ein Ausschnitt von Code verwende ich ‚admin‘ und ‚Personal‘ Optionen zu einem vorhandenen Django Benutzer hinzuzufügen; Ich weiß nicht, über django-socialauth oder extra_data Feld, aber ich vermute, so etwas wie dies anwendbar sein könnten:

: 
userqueryset = User.objects.filter(username=user_name) 
if not userqueryset: 
    print("User %s does not exist"%user_name, file=sys.stderr) 
    return am_errors.AM_USERNOTEXISTS 
# Have all the details - now update the user in the Django user database 
# see: 
# https://docs.djangoproject.com/en/1.7/ref/contrib/auth/#django.contrib.auth.models.User 
# https://docs.djangoproject.c om/en/1.7/ref/contrib/auth/#manager-methods 
user = userqueryset[0] 
user.is_staff  = True 
user.is_superuser = True 
user.save() 
: 

FWIW, meine app ist 3rd-Party-Authentifizierung verwendet wird (speziell atm OpenId Connect via Google+), so Ich denke, hier ist ein gemeinsames Ziel. In meinem Fall möchte ich in der Lage sein, Django Admin-Privilegien zu einem Benutzer hinzuzufügen, der bereits erstellt wurde.

Das vollständige Modul mit dem obigen Code befindet sich unter github.com/gklyne/annalist/blob/develop/src/annalist_root/annalist_manager/am_createuser.py#L231

Verwandte Themen