2013-04-11 10 views
5

Sono riuscito a utilizzare con successo django-socialauth per associare un account (in questo caso, un account instagram) a un account utente esistente. Ho anche impostato la mia pipeline per raccogliere ulteriori dettagli utente:Come aggiornare un `extra_data` di un utente dopo che sono stati associati all'account?

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() 

Questo funziona perfettamente quando un account è associato per la prima volta. Tuttavia, se l'account è già stato associato, il campo username non sarà presente in extra_data.

Come aggiornare un utente extra_data dopo che l'associazione è già stata effettuata? C'è un modo per utilizzare lo standard django-socialauth senza disconnettere e riconnettersi o utilizzare l'API dell'account (ad esempio Instagram)?

Se aiuta, questo è il mio gasdotto in questo momento:

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' 
) 

risposta

0

Ecco un frammento di codice che uso per aggiungere 'admin' e le opzioni di 'personale' a un utente esistente Django; Non so su django-socialauth o il campo extra_data, ma sto cercando di indovinare qualcosa di simile potrebbe essere applicabile:

: 
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, la mia app è utilizzando l'autenticazione 3rd party (specificamente atm OpenID Connect via Google+), in modo da Penso che ci sia un obiettivo comune qui. Nel mio caso voglio essere in grado di aggiungere i privilegi di amministratore Django a un utente che è già stato creato.

Il modulo completo contenente il codice sopra riportato è github.com/gklyne/annalist/blob/develop/src/annalist_root/annalist_manager/am_createuser.py#L231

Problemi correlati