我正在尝试创建自定义登录表单以对远程服务器进行身份验证,因此我必须创建自定义登录表单。我创建了一个用户 username =' test3',password =' test'在django-shell中。当我尝试使用authenticate-function时,我总是得到None。当我尝试使用相同的用户名和密码登录时,我可以登录。我可以排除以下可能的错误: - ' django.contrib.auth.backends.ModelBackend'列在MIDDLEWARE_CLASSES中:
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.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.auth.backends.ModelBackend',
)
User.objects.get(username='test3').check_password('test')
返回True 我正在使用django 1.8 原则上,我只需要会话数据,因为用户存储在不同的地方。
今天早上,我意识到,问题只能部分解决: - authenticate()在shell中工作 - 在我看来,我可以检索用户并成功检查其密码 但话说回来,当我尝试在我的视图中使用authenticate() - 函数时,我得到一个None-type对象。我甚至删除了数据库,但行为仍然相同。 我的settings.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 import authenticate
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
我还硬编码用户/密码字符串以排除与编码相关的问题,但没有成功。
答案 0 :(得分:0)
django.contrib.auth.backends.ModelBackend
是身份验证后端,而不是中间件类。
您应该从MIDDLEWARE_CLASSES
设置中删除此身份验证后端条目。
此外,您需要将AUTHENTICATION_BACKENDS
定义为以下内容:
# Authentication backends
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend', # default
.. # any other authentication backends
)