我正在尝试创建一个自定义登录表单,用于在远程服务器上进行身份验证,因此我必须创建一个自定义登录表单。我在django-shell中创建了一个用户名=‘test3’、密码=‘test’的用户。当我尝试使用身份验证函数时,我总是一无所获。当我尝试用相同的用户名和密码登录时,我可以登录。我可以排除以下可能的错误:-“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')返回真原则上我使用django 1.8,我只需要会话数据,因为用户存储在不同的地方。
今天早上,我意识到这个问题只得到了部分解决:- authenticate()在shell中工作--在我看来,我可以检索用户并成功地检查其密码,但是当我试图在我的视图中使用-function时,我得到了一个None类型的对象。我甚至删除了数据库,但行为还是一样的。我的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导入身份验证
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我还硬编码了用户/密码字符串,以引出一个与编码相关的问题,但没有成功。
发布于 2015-09-23 13:57:17
django.contrib.auth.backends.ModelBackend是一个身份验证后端,而不是中间件类。
您应该从MIDDLEWARE_CLASSES设置中删除此身份验证后端条目。
此外,您还需要将AUTHENTICATION_BACKENDS定义为如下所示:
# Authentication backends
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend', # default
.. # any other authentication backends
)https://stackoverflow.com/questions/32741362
复制相似问题