首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django authenticate()始终不返回任何

django authenticate()始终不返回任何
EN

Stack Overflow用户
提问于 2015-09-23 13:44:21
回答 1查看 1.9K关注 0票数 0

我正在尝试创建一个自定义登录表单,用于在远程服务器上进行身份验证,因此我必须创建一个自定义登录表单。我在django-shell中创建了一个用户名=‘test3’、密码=‘test’的用户。当我尝试使用身份验证函数时,我总是一无所获。当我尝试用相同的用户名和密码登录时,我可以登录。我可以排除以下可能的错误:-“django.contrib.auth.backends.ModelBackend”列在MIDDLEWARE_CLASSES中:

代码语言:javascript
复制
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',
    )
  • 密码以散列形式存储(我使用sqlite进行了检查)
  • User.objects.get(username='test3').check_password('test')返回真
  • 在激活身份验证-后端之后,我完成了syncdb、迁移和生成。

原则上我使用django 1.8,我只需要会话数据,因为用户存储在不同的地方。

今天早上,我意识到这个问题只得到了部分解决:- authenticate()在shell中工作--在我看来,我可以检索用户并成功地检查其密码,但是当我试图在我的视图中使用-function时,我得到了一个None类型的对象。我甚至删除了数据库,但行为还是一样的。我的settings.py:

代码语言:javascript
复制
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导入身份验证

代码语言:javascript
复制
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')

产出:

代码语言:javascript
复制
*************************************** test True
*************************************** None

我还硬编码了用户/密码字符串,以引出一个与编码相关的问题,但没有成功。

EN

回答 1

Stack Overflow用户

发布于 2015-09-23 13:57:17

django.contrib.auth.backends.ModelBackend是一个身份验证后端,而不是中间件类。

您应该从MIDDLEWARE_CLASSES设置中删除此身份验证后端条目。

此外,您还需要将AUTHENTICATION_BACKENDS定义为如下所示:

代码语言:javascript
复制
# Authentication backends
AUTHENTICATION_BACKENDS = (
        'django.contrib.auth.backends.ModelBackend', # default
        ..   # any other authentication backends
    )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32741362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档