2013-04-11 32 views
5

Udało mi się użyć django-socialauth, aby powiązać konto (w tym przypadku konto na Instagramie) z istniejącym kontem użytkownika. Przygotowałem również potok do zbierania dodatkowych informacji o użytkowniku:Jak zaktualizować `extra_data 'użytkownika po powiązaniu z kontem?

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

Działa to świetnie, gdy konto jest powiązane po raz pierwszy. Jeśli jednak konto zostało już powiązane, pole username nie będzie dostępne w extra_data.

Jak mogę zaktualizować użytkownika extra_data po utworzeniu powiązania? Czy jest jakiś sposób, aby użyć django-socialauth, aby to zrobić bez odłączania i ponownego łączenia lub korzystania z API konta (na przykład Instagrama)?

Jeśli to pomoże, to moja rurociąg w tej chwili:

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

Odpowiedz

0

Oto fragment kodu używam dodać „admin” i opcje „Personel” do istniejącego użytkownika Django; Nie wiem o django-socialauth lub pole extra_data, ale zgaduję coś takiego może mieć zastosowanie:

: 
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, moja aplikacja jest uwierzytelnianie za pomocą 3rd partii (konkretnie atm OpenID Connect Google+), tak Myślę, że jest tu jakiś wspólny cel. W moim przypadku chcę móc dodać uprawnienia administratora Django do użytkownika, który już został utworzony.

Pełny moduł zawierający powyższy kod to github.com/gklyne/annalist/blob/develop/src/annalist_root/annalist_manager/am_createuser.py#L231