2015-09-23 2 views
0

Я пытаюсь создать пользовательскую форму входа для аутентификации на удаленном сервере, поэтому мне нужно создать пользовательскую форму входа. Я создал пользователя с username = 'test3', password = 'test' в django-shell. Когда я пытаюсь использовать функцию аутентификации, я всегда получаю None. Когда я пытаюсь войти с тем же именем пользователя и паролем, я могу войти в систему. Я могу исключить следующие возможные ошибки: - «django.contrib.auth.backends.ModelBackend» указана в MIDDLEWARE_CLASSES:django authenticate() allways возвращает None

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, мигрировать и makemigrations после активации аутентификации-бэкенд

Я использую django 1.8 В принципе, мне нужны только данные сеанса, потому что пользователи хранятся в другом месте.

Этим утром, я понял, что проблема только решена частично: - аутентификации() работает в оболочке - на мой взгляд, я могу получить пользователя и успешно проверить свой пароль Но опять же, когда я пытаюсь для использования функции 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 импорта аутентификации

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 

Я также жестко закодировал строки user/password, чтобы исключить проблему, связанную с кодировкой, но без успеха.

+1

Эта проблема возникает только в оболочке или же в представлении? И вы используете 'authenticate (username = 'test3', password = 'test')'? Где вы импортируете 'authenticate()' from? – Jkdc

+1

, пожалуйста, отправьте MCVE –

+0

из django.contrib.auth import authenticate – Sascha

ответ

0

django.contrib.auth.backends.ModelBackend является базой данных аутентификации, а не классом промежуточного программного обеспечения.

Вы должны удалить эту учетную запись аутентификации с MIDDLEWARE_CLASSES.

Кроме того, вам нужно определить AUTHENTICATION_BACKENDS к чему-то, как показано ниже:

# Authentication backends 
AUTHENTICATION_BACKENDS = (
     'django.contrib.auth.backends.ModelBackend', # default 
     .. # any other authentication backends 
    ) 
+1

А, спасибо, это помогло. Мне также пришлось удалить тестостериусов – Sascha

Смежные вопросы