【发布时间】:2018-06-28 07:05:16
【问题描述】:
我正在使用 Django-Python Social Auth 应用程序,并且我正在尝试扩展我的管道,以便当用户使用 Facebook 注册时,他们会同时注册到我的 Mailchimp 邮件列表(并发送一封电子邮件以验证)。如果用户使用传统输入法(但不是通过社交身份验证)注册,则此方法可以正常工作。并且返回此错误:
ValueError at /oauth/complete/facebook/
not enough values to unpack (expected 2, got 1)
这里是完整的堆栈跟踪:
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\exception.py" in inner
35. response = get_response(request)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
44. response = view_func(request, *args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\social_django\utils.py" in wrapper
49. return func(request, backend, *args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\social_django\views.py" in complete
33. *args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\social_core\actions.py" in do_complete
41. user = backend.complete(user=user, *args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\social_core\backends\base.py" in complete
40. return self.auth_complete(*args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\social_core\utils.py" in wrapper
252. return func(*args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\social_core\backends\facebook.py" in auth_complete
111. return self.do_auth(access_token, response, *args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\social_core\backends\facebook.py" in do_auth
153. return self.strategy.authenticate(*args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\social_django\strategy.py" in authenticate
107. return authenticate(*args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\contrib\auth\__init__.py" in authenticate
70. user = _authenticate_with_backend(backend, backend_path, request, credentials)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\contrib\auth\__init__.py" in _authenticate_with_backend
116. return backend.authenticate(*args, **credentials)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\social_core\backends\base.py" in authenticate
80. return self.pipeline(pipeline, *args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\social_core\backends\base.py" in pipeline
83. out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\social_core\backends\base.py" in run_pipeline
112. func = module_member(name)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\social_core\utils.py" in module_member
57. mod, member = name.rsplit('.', 1)
Exception Type: ValueError at /oauth/complete/facebook/
Exception Value: not enough values to unpack (expected 2, got 1)
我的管道如下所示:
SOCIAL_AUTH_PIPELINE = (
'social_core.pipeline.social_auth.social_details',
'social_core.pipeline.social_auth.social_uid',
'social_core.pipeline.social_auth.auth_allowed',
'social_core.pipeline.social_auth.social_user',
'social_core.pipeline.user.get_username',
'social_core.pipeline.social_auth.associate_by_email', # <--- enable this one
'social_core.pipeline.user.create_user',
'social_core.pipeline.social_auth.associate_user',
'sendsub',
'social_core.pipeline.social_auth.load_extra_data',
'social_core.pipeline.user.user_details',
)
您可以看到我添加了一个基于此函数的sendsub 函数——并且在某种程度上模仿了off this page here
def sendsub(backend, user, response, *args, **kwargs):
profile = user.get_profile()
email = profile.email
thread = threading.Thread(target=self.run, args=())
thread.daemon = True
thread.start()
def run(self):
API_KEY = settings.MAILCHIMP_API_KEY
LIST_ID = settings.MAILCHIMP_SUBSCRIBE_LIST_ID
api = mailchimp.Mailchimp(API_KEY)
try:
api.lists.subscribe(LIST_ID, {'email': self.email})
except:
return False
当这个sendsub 函数应用到我的常规注册页面一个用户模型时再次正常工作..这里是函数(略有不同)。
class SendSubscribeMail(object):
def __init__(self, email):
self.email = email
thread = threading.Thread(target=self.run, args=())
thread.daemon = True
thread.start()
def run(self):
API_KEY = settings.MAILCHIMP_API_KEY
LIST_ID = settings.MAILCHIMP_SUBSCRIBE_LIST_ID
api = mailchimp.Mailchimp(API_KEY)
try:
api.lists.subscribe(LIST_ID, {'email': self.email})
except:
return False
【问题讨论】:
-
您的问题中缺少一条重要信息。完整的堆栈跟踪
-
好的,稍后会添加一秒钟--谢谢
-
全部更新,出现完整错误。谢谢
标签: python django python-social-auth django-socialauth