繁体   English   中英

django authenticate() 仍然总是返回 None

[英]django authenticate() still allways returns None

我从昨天开始编辑我的问题: django authenticate() 总是返回 None ,但我认为没有人会注意,因为我已经将问题标记为已回答。 -authenticate() 在 shell 中工作(昨天没有工作)-在我看来,我可以检索用户并成功检查其密码 但是,再次,当我尝试在我看来使用身份验证()函数时,我得到一个 None 类型的对象。 我什至删除并重新创建了数据库,但行为仍然相同。 我的设置.py:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    #'django.contrib.auth.middleware.RemoteUserMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.contrib.staticfiles.finders.FileSystemFinder',
)

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',                           
    #'django.contrib.auth.backends.RemoteUserBackend',
    )

视图:从 django.contrib.auth.models 导入用户从 django.contrib.auth 导入验证

def authentifizieren(request):
    """
    """
    if request.method == 'POST':
        uname = request.POST['username']
        passwd = request.POST['password']
        dbuser = User.objects.get(username=uname)
        dbuvalid=dbuser.check_password(passwd)
        auser = authenticate(username=uname, password=passwd)
        print('***************************************', dbuser,dbuvalid)
        print('***************************************', auser)
    if (auser != None):
        login(request, auser)
    return redirect('/startseite')

输出:

*************************************** test True
*************************************** None

我还对用户/密码字符串进行了硬编码以排除与编码相关的问题,但没有成功。 顺便说一句,什么是 MCVE ?

现在authenticate() 起作用了。 这是一个版本不匹配。 现在我记得我在家里创建了初始项目,在我的 gentoo 机器上仍然安装了 1.7.7 版本,而在 Windows 机器上工作的是 1.8.4,我认为这是不同的设置文件,愚蠢我的错误。

带来不便敬请谅解

在 django 2.1 或更高版本上,您应该将请求传递给函数身份验证以进行自定义身份验证。 例如:

class PasswordlessAuthenticationBackend(object):

    def authenticate(self, request, uid):
        try:
            token = Token.objects.get(uid=uid)
            print('got user', file=sys.stderr)
            return ListUser.objects.get(email=token.email)
        except ListUser.DoesNotExist:
            print('new user', file=sys.stderr)
            return ListUser.objects.create(email=token.email)
        except Token.DoesNotExist:
            return None

最后,不要忘记 settings.py 中的设置: 1. accounts 是您的应用程序名称 2. ListUser 是您的模型名称

AUTH_USER_MODEL = 'accounts.ListUser'
AUTHENTICATION_BACKENDS = (
    'accounts.authentication.PasswordlessAuthenticationBackend',
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM