我想在Django中实现一个自定义身份验证后端,它将基于来自第三方服务(Facebook,LinkedIn等)的唯一ID登录用户。基本上,一旦用户使用OAuth访问第三方服务并获得唯一标识符,我想要无缝登录它们。通过第三方应用程序的Django自定义身份验证后端
但我的自定义后端不起作用,并返回`None。'。
这里是我的自定义后端:
from myapp.models import Account
from django.contrib.auth.models import User
class ThirdPartyServiceBackend(object):
def authenticate(self,acct_id=None):
if acct_id is not None:
try:
return User.objects.get(account__uniq_id=acct_id)
except:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
我已经启用这个后端在我的settings.py:
AUTHENTICATION_BACKENDS = (
'myproject.myapp.backends.ThirdPartyServiceBackend',
'django.contrib.auth.backends.ModelBackend',
)
这是我如何处理它在views.py:
# oauth processing and everything goes here
try:
# login and redirect to search page
user = authenticate(acct_id=third_party_service_user_info['id'])
if user is not None:
auth_login(request,user)
return HttpResponseRedirect('/')
这调用shell中的工作没有问题 - 用户返回。但验证电话失败 - 关于我在做什么错误的任何想法?