我昨天编辑了我的问题: django authenticate() allways returns None,但我认为没有人会注意,因为我已将问题标记为已回答。 - 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
我还硬编码用户/密码字符串以排除与编码相关的问题,但没有成功。 那么,什么是MCVE?
答案 0 :(得分:0)
现在authenticate()有效。这是版本不匹配。现在我记得我在家里创建了初始项目,在我的gentoo-machine上仍然安装了1.7.7版本,并在Windows机器上工作1.8.4。我认为这是不同的设置文件,愚蠢我的错误。
抱歉给您带来不便
答案 1 :(得分:0)
On django version 2.1 or above, you should pass the request into function authenticate for the customized authentication. For example:
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
Finally, don't forget the settings in settings.py: 1. accounts is your app name 2. ListUser is your model name
AUTH_USER_MODEL = 'accounts.ListUser'
AUTHENTICATION_BACKENDS = (
'accounts.authentication.PasswordlessAuthenticationBackend',
)