django身份验证:未调用我自己的authenticate()

时间:2018-08-27 15:25:21

标签: authentication django-2.1

我有一个Django应用,可以在python-3.6 / Django-1.11上正常工作

我正在尝试使其在python-3.7上运行,这意味着移至Django-2.x,所以我选择了Django-2.1

我遇到的第一个问题-很可能与我的观点无关-是

  • MIDDLEWARE_CLASSES重命名为MIDDLEWARE,然后
  • 正在移除 该列表中的django.contrib.auth.middleware.SessionAuthenticationMiddleware已弃用

与适用于3.6 / 1.11组合的代码相比,仅进行了这些更改,我的django服务器就可以很好地启动,但是我无法登录。

我正在使用我的2个自定义后端:

AUTHENTICATION_BACKENDS = (
    'plc.plcauthbackend.PlcAuthBackend',
    'mfauth.mfbackend.ManifoldBackend',
)

插入我的代码,我发现在尝试登录时:

  • 该框架为每个类创建一个实例(插入__init__
  • 但在这两个实例中的任何一个实例上(例如,authenticate())都不会调用authenticate

我怀疑authenticate签名的约定有一些变化,但似乎在django的文档中没有任何有关升级到2.x的内容。

这是第一个身份验证类的代码的简化(在我的情况下实际上应该成功)。

<snip>

class PlcAuthBackend:
    """
    Authenticate against PLCAPI
    """

    def __init__(self, plcapi_url=config_plcapi_url):
        print(f"Creating PlcAuthBackend -> {plcapi_url}")
        self.plcapi_url = plcapi_url

    # Required for your backend to work properly - unchanged in most scenarios
    def get_user(self, user_id):
        print(f"plc get_user")
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

    # This is called by the standard Django login procedure
    def authenticate(self, token=None):
        print(f"plc authenticate")
        if token is None:
            return
        <snip>

使用此代码,服务器控制台显示“正在创建PlcAuthBackend”消息,但是我没有提到我期望的“ plc authenticate”消息

我欢迎任何有关如何尝试解决此问题的线索。

0 个答案:

没有答案