2016-04-20 3 views
1

Ich habe benutzerdefinierte Piplein in meinem Projekt Django. Nach this example Ich versuche, Zugriffstoken zu bekommen (um Daten von Google Plus zu bekommen), aber es gibt mir TypeError: string indices must be integers zurück.Python-social-auth piplene retruns TypeError wenn ich versuche, acces_token

Individuelle Pipeline:

def user_details(strategy, details, response, user=None, *args, **kwargs): 
    .... 

    if user: 
     if kwargs['is_new']: 
      if "google" in kwargs['backend'].redirect_uri: 
       ... 
       try: 
        social = user.social_auth.get(provider='google-plus') 
        access_token = logger.warning(social.extra_data['access_token']) 
        .... 

       except HTTPError: 
        pass 
       ..... 

Vollzurückverfolgungs:

Traceback (most recent call last): 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/django/core/handlers/base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/django/core/handlers/base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func 
    response = view_func(request, *args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view 
    return view_func(*args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/social/apps/django_app/utils.py", line 51, in wrapper 
    return func(request, backend, *args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/social/apps/django_app/views.py", line 28, in complete 
    redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/social/actions.py", line 43, in do_complete 
    user = backend.complete(user=user, *args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/social/backends/base.py", line 41, in complete 
    return self.auth_complete(*args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/social/utils.py", line 229, in wrapper 
    return func(*args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/social/backends/google.py", line 158, in auth_complete 
    *args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/social/utils.py", line 229, in wrapper 
    return func(*args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/social/backends/oauth.py", line 398, in do_auth 
    return self.strategy.authenticate(*args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/social/strategies/django_strategy.py", line 96, in authenticate 
    return authenticate(*args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/django/contrib/auth/__init__.py", line 74, in authenticate 
    user = backend.authenticate(**credentials) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/social/backends/base.py", line 82, in authenticate 
    return self.pipeline(pipeline, *args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/social/backends/base.py", line 85, in pipeline 
    out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs) 
    File "/home/linevich/.virtualenvs/tathros/lib/python3.4/site-packages/social/backends/base.py", line 112, in run_pipeline 
    result = func(*args, **out) or {} 
    File "/home/linevich/projects/tathros/proto/pipeline.py", line 54, in user_details 
    auth_token = social.extra_data['access_token'] 
TypeError: string indices must be integers 

Irgendwelche Ideen?

+1

können Sie den Wert von 'repr (social.extra_data) zeigen'? Es scheint ein 'str' .. –

+0

' zu sein '{ "Code": null, "access_token": "ya29..ygKZMLlldKN5jJM3UE9zkgMkcX9Gd3Qx1yzvnskn7C4RfrhDBNhYI974_bmGKdYgDd45zjqEYnI", "gültig bis": 3599, "user_id": "113965887663380153252"}' ' –

+1

ist, dass von 'print (repr (social.extra_data))' oder nur der 'repr (..)' in eine Konsole eingegeben? Wenn es gedruckt wurde, dann scheint es eine Zeichenfolge zu sein, die ein gültiges Diktatliteral ist, das ungerade ist, und wenn es das Ergebnis der Konsole ist, dann ist es definitiv ein "Diktat", was bedeutet, dass der Fehler keinen Sinn ergibt ... etwas ist sehr merkwürdig daran ... –

Antwort

1

Die solutuion war einfach:

auth_token = json.loads(social.extra_data)['access_token'] 
Verwandte Themen