django-pipeline 崩溃 python 社交身份验证
django-pipeline crashes python social auth
目前我正在做一个考虑社交认证的小项目(所以 python-social-auth 很棒)。另外,我想集成 django-pipeline 来处理我的资产(css 主要)。
执行社交注册的 JS:
vm.doSocialAuth = function(provider) {
var authURL = '/auth/login/' + provider + '/?next=/auth/completed/';
$window.open(authURL, 500, 500);
};
社交身份验证工作正常。
但是当我这样做时:
INSTALLED_APPS += ['pipeline']
PIPELINE = {
# 'PIPELINE_ENABLED': True, # Missing this allows pipeline in debug mode
'STYLESHEETS': {
'main': {
'source_filenames': (
'css/cover.css',
),
'output_filename': 'css/main.css',
'extra_context': {
'media': 'screen,projection',
},
},
},
}
然后我尝试进行社交登录,触发了此异常:
ERROR Internal Server Error: /auth/complete/twitter/
Traceback (most recent call last):
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/apps/django_app/utils.py", line 54, in wrapper
return func(request, backend, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/apps/django_app/views.py", line 28, in complete
redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/actions.py", line 43, in do_complete
user = backend.complete(user=user, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/backends/base.py", line 41, in complete
return self.auth_complete(*args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/utils.py", line 229, in wrapper
return func(*args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/backends/oauth.py", line 182, in auth_complete
return self.do_auth(access_token, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/utils.py", line 229, in wrapper
return func(*args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/backends/oauth.py", line 193, in do_auth
return self.strategy.authenticate(*args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/strategies/django_strategy.py", line 96, in authenticate
return authenticate(*args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 74, in authenticate
user = backend.authenticate(**credentials)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/backends/base.py", line 82, in authenticate
return self.pipeline(pipeline, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/backends/base.py", line 85, in pipeline
out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/backends/base.py", line 111, in run_pipeline
func = module_member(name)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/utils.py", line 55, in module_member
mod, member = name.rsplit('.', 1)
ValueError: need more than 1 value to unpack
我不知道它是 python-social-auth 库还是 django-pipeline 的问题,所以我把它贴在这里了。
感谢任何帮助。
下一个答案的功劳全部用于Julian Bez, he posted this评论。
他基本上是建议在我们项目的设置文件中定义一个 SOCIAL_AUTH_PIPELINE
变量,并且 python-social-auth 将与 django-pipeline 一起顺利工作。
所以,这是我的 SOCIAL_AUTH_PIPELINE
:
settings.py
# By defining SOCIAL_AUTH_PIPELINE, we avoid a conflict between django-pipeline
# and python-social-auth.
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'social.pipeline.user.get_username',
# Send a validation email to the user to verify its email address.
# Disabled by default.
# 'social.pipeline.mail.mail_validation',
# Associates the current social details with another user account with
# a similar email address. Disabled by default.
# 'social.pipeline.social_auth.associate_by_email',
'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details',
)
目前我正在做一个考虑社交认证的小项目(所以 python-social-auth 很棒)。另外,我想集成 django-pipeline 来处理我的资产(css 主要)。
执行社交注册的 JS:
vm.doSocialAuth = function(provider) {
var authURL = '/auth/login/' + provider + '/?next=/auth/completed/';
$window.open(authURL, 500, 500);
};
社交身份验证工作正常。
但是当我这样做时:
INSTALLED_APPS += ['pipeline']
PIPELINE = {
# 'PIPELINE_ENABLED': True, # Missing this allows pipeline in debug mode
'STYLESHEETS': {
'main': {
'source_filenames': (
'css/cover.css',
),
'output_filename': 'css/main.css',
'extra_context': {
'media': 'screen,projection',
},
},
},
}
然后我尝试进行社交登录,触发了此异常:
ERROR Internal Server Error: /auth/complete/twitter/
Traceback (most recent call last):
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/apps/django_app/utils.py", line 54, in wrapper
return func(request, backend, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/apps/django_app/views.py", line 28, in complete
redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/actions.py", line 43, in do_complete
user = backend.complete(user=user, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/backends/base.py", line 41, in complete
return self.auth_complete(*args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/utils.py", line 229, in wrapper
return func(*args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/backends/oauth.py", line 182, in auth_complete
return self.do_auth(access_token, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/utils.py", line 229, in wrapper
return func(*args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/backends/oauth.py", line 193, in do_auth
return self.strategy.authenticate(*args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/strategies/django_strategy.py", line 96, in authenticate
return authenticate(*args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 74, in authenticate
user = backend.authenticate(**credentials)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/backends/base.py", line 82, in authenticate
return self.pipeline(pipeline, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/backends/base.py", line 85, in pipeline
out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/backends/base.py", line 111, in run_pipeline
func = module_member(name)
File "/home/dosher/.venvsa/env_hrpro/lib/python2.7/site-packages/social/utils.py", line 55, in module_member
mod, member = name.rsplit('.', 1)
ValueError: need more than 1 value to unpack
我不知道它是 python-social-auth 库还是 django-pipeline 的问题,所以我把它贴在这里了。
感谢任何帮助。
下一个答案的功劳全部用于Julian Bez, he posted this评论。
他基本上是建议在我们项目的设置文件中定义一个 SOCIAL_AUTH_PIPELINE
变量,并且 python-social-auth 将与 django-pipeline 一起顺利工作。
所以,这是我的 SOCIAL_AUTH_PIPELINE
:
settings.py
# By defining SOCIAL_AUTH_PIPELINE, we avoid a conflict between django-pipeline
# and python-social-auth.
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'social.pipeline.user.get_username',
# Send a validation email to the user to verify its email address.
# Disabled by default.
# 'social.pipeline.mail.mail_validation',
# Associates the current social details with another user account with
# a similar email address. Disabled by default.
# 'social.pipeline.social_auth.associate_by_email',
'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details',
)