Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django通过第三方应用程序自定义身份验证后端_Python_Django_Custom Backend - Fatal编程技术网

Python Django通过第三方应用程序自定义身份验证后端

Python Django通过第三方应用程序自定义身份验证后端,python,django,custom-backend,Python,Django,Custom Backend,我正在尝试在Django中实现一个自定义身份验证后端,它将根据第三方服务(Facebook、LinkedIn等)的唯一id登录用户。基本上,一旦用户OAuth到第三方服务并获得唯一标识符,我希望他们无缝登录 但我的自定义后端不工作,返回'None' 以下是我的自定义后端: from myapp.models import Account from django.contrib.auth.models import User class ThirdPartyServiceBackend(obje

我正在尝试在Django中实现一个自定义身份验证后端,它将根据第三方服务(Facebook、LinkedIn等)的唯一id登录用户。基本上,一旦用户OAuth到第三方服务并获得唯一标识符,我希望他们无缝登录

但我的自定义后端不工作,返回'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
我已在my 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中工作没有问题——返回用户。但是身份验证调用失败了--知道我做错了什么吗?

来自Django docs:

一旦用户通过身份验证,Django将存储用于在用户会话中对用户进行身份验证的后端,并在该会话期间,只要需要访问当前通过身份验证的用户,就会重新使用相同的后端。这实际上意味着身份验证源是基于每个会话缓存的,因此,如果您更改了身份验证后端,如果您需要强制用户使用不同的方法重新身份验证,则需要清除会话数据。一种简单的方法是执行Session.objects.all().delete()

试试看,我也有同样的问题,这是我的解决办法