我的Django设置文件中有以下pipleline用于使用python-social-auth模块登录Facebook:
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.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.get_username',
'social.pipeline.user.user_details',
'social.pipeline.social_auth.associate_by_email',
)
我的登录方法如下:
当我第一次尝试使用Facebook进行身份验证时,我得到以下信息: / complete / facebook /的AttributeError 'NoneType'对象没有属性'provider'
def user_login(request):
""" Login page view."""
#context = RequestContext(request)
context = RequestContext(request,
{'request': request,
'user': request.user})
user = request.user
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password) # authentication
if not user.is_anonymous():
print user
if not request.method == 'POST':
user.backend = 'django.contrib.auth.backends.ModelBackend'
if user.is_active:
login(request, user)
return HttpResponseRedirect('/')
else:
return render_to_response('main/login.html', {}, context)
else:
return render_to_response('main/login.html', {}, context)
但是,如果我注释掉了SOCIAL_AUTH_PIPELINE并尝试登录,那就没关系了。当然,一旦社交认证用户进入数据库,Pipleline就能正常工作。
我很感激任何寻找错误的想法。
答案 0 :(得分:6)
这可能不是你的原因,因为在我的情况下,无论管道是什么,我都会收到此错误,但它可能对其他人有帮助。
在我的情况下,我收到此错误,因为我从auth_user
表中删除了用户,但在social_auth_usersocialauth
表中仍然存在指向不存在的用户ID的记录,该用户ID无法使用正确的用户创建记录。
在我的情况下,通过删除social_auth_usercoaialauth
表中的记录或修复该记录以指向现有用户ID来解决这个问题。
答案 1 :(得分:1)
尝试添加此设置: SOCIAL_AUTH_ALWAYS_ASSOCIATE = True
您的用户似乎未与社交个人资料相关联。