簡體   English   中英

如何在python-social-auth django中設置額外的數據?

[英]How set extra data in python-social-auth django?

我有一個問題,當嘗試使用管道保存額外的數據但沒有保存時​​。 這里是一個代碼:

def save_picture(strategy, user, response, details,social_user,
            is_new=False, *args, **kwargs):

if is_new and strategy.backend.name == 'facebook':
    url = 'http://graph.facebook.com/{0}/picture'.format(response['id'])
social_user.set_extra_data('url':url)

也許我必須使用其他方法?

我找到了django-social-auth的解決方案,但是它們不適用於python-social-auth:

social_user.extra_data['your_field']

但是它們不起作用,我嘗試使用

social_user.set_extra_data({'url': url})

但這引發了例外:

Environment:


Request Method: GET Request URL: http://friends-on-map.herokuapp.com/complete/facebook/?redirect_state=6Vnf0DO7qEL4uEbK1bxubv9mlYF0pZgZ&code=AQAmR8F-dhTnjVYvsJ1zfnWIE_qJOfsF-hbJmJ95bC-gSFnbgpAHCaA-gPsYoa3eO-83Bk4u32E2dISKZ5jsRfQ49RbmrvzbpQFkwn886h7nqf3Eol4sKuqei7Zjtvtzq83X7tl6jHaN5tVcGsuhFbGZGBZPmwtaYpz2viNN-WcIRaj1WMmns_SpI7F4npYZZYHu_gkM1tyOnYkyupJE0hVEggkxJKi9d5Zx9J58FCp90K0IUHZbdgr63Rn2rUNtYsePqb85xVUfVolZloc2kDRySL_SUBlbT7cGKI633BcEQ1lsXdfD4s5e-2XeqXRj40w&state=6Vnf0DO7qEL4uEbK1bxubv9mlYF0pZgZ

Django Version: 1.5.5 Python Version: 2.7.4 Installed Applications: ('django.contrib.auth',  'django.contrib.contenttypes',  'django.contrib.sessions',  'django.contrib.sites',  'django.contrib.messages',  'django.contrib.staticfiles',  'django.contrib.admin',  'gunicorn',  'south',  'social.apps.django_app.default',  'auth') Installed Middleware: ('django.middleware.common.CommonMiddleware',  'django.contrib.sessions.middleware.SessionMiddleware',  'django.middleware.locale.LocaleMiddleware',  'django.middleware.csrf.CsrfViewMiddleware',  'django.contrib.auth.middleware.AuthenticationMiddleware',  'django.contrib.messages.middleware.MessageMiddleware')


Traceback: File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  115.                         response = callback(request, *callback_args, **callback_kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
  77.         return view_func(*args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/social/apps/django_app/utils.py" in wrapper
  32.             return func(request, backend, *args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/social/apps/django_app/views.py" in complete
  25.                        redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/social/actions.py" in do_complete
  54.                                  *args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/social/strategies/base.py" in complete
  69.         return self.backend.auth_complete(*args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/social/backends/facebook.py" in auth_complete
  74.         return self.do_auth(access_token, response, *args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/social/backends/facebook.py" in do_auth
  106.         return self.strategy.authenticate(*args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/social/strategies/django_strategy.py" in authenticate
  69.         return authenticate(*args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in authenticate
  60.             user = backend.authenticate(**credentials) File "/app/.heroku/python/lib/python2.7/site-packages/social/backends/base.py" in authenticate
  78.         return self.pipeline(pipeline, *args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/social/backends/base.py" in pipeline
  81.         out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs) File "/app/.heroku/python/lib/python2.7/site-packages/social/backends/base.py" in run_pipeline
  106.             func = module_member(name) File "/app/.heroku/python/lib/python2.7/site-packages/social/utils.py" in module_member
  22.     return getattr(module, member)

Exception Type: AttributeError at /complete/facebook/ Exception Value: 'module' object has no attribute 'load_extra_data'

我解決了,下面的代碼可以解決問題。

def get_user_avatar(strategy, details, response, uid, user, *args, **kwargs):
    social = kwargs.get('social') or strategy.storage.user.get_social_auth(
        strategy.backend.name,
        uid
    )
    url = None
    if strategy.backend.name == 'facebook':
        url = "http://graph.facebook.com/%s/picture?type=large" % response['id']

    if url:
        social.set_extra_data({'photo': url})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM