2013-09-06 4 views
8

У меня есть следующий фрагмент кода:Джанго Аутентифицировать возвращает None

user = User(username='[email protected]',email='[email protected]') 
user.set_password('pass') 
user.save() 
u = authenticate(username='[email protected]', password='pass') #this always returns None!!! 

Проблема заключается в том, у не всегда Нет. Я следил за примерами кода в других столбцах переполнения стека и сузил его до указанных строк.

Любые идеи относительно того, что может произойти?

+0

у вас есть некоторые пользовательские настройки? – mariodev

ответ

9

Положите что-то вроде этого в настройках

#Authentication backends 
AUTHENTICATION_BACKENDS = (
     'django.contrib.auth.backends.ModelBackend', 
    ) 

или если вы используете userena для ваших учетных записей

#Authentication backends 
AUTHENTICATION_BACKENDS = (
    'userena.backends.UserenaAuthenticationBackend', 
    'guardian.backends.ObjectPermissionBackend', 
    'django.contrib.auth.backends.ModelBackend', 
) 
0

Почему вы не создаете пользователя, как это:

user = User.objects.create_user(username="whatever", email="[email protected]", password="password") 
user = authenticate(username="whatever",password="password") 
+0

Спасибо, H H H. Это был мой оригинальный код. Я изменил его и до сих пор не слава. Позвольте мне опубликовать код ответа ниже ... –

+0

-1. Это не верно. Таким образом, пароль будет сохранен непроверенным и не будет совпадать, если будет проверен хешированная версия. –

+0

Daniel, я тестировал это, и он хэшировал пароль. Был ли это другой пароль, я никогда не узнаю, но он определенно хэшировал. Моя проблема заключалась в том, что мне не хватало настройки Authentication Backends –

0

Измененный к следующему. Все еще не слава

email = "[email protected]" 
password = "pass" 
user = User.objects.create_user(email,email,password) 
u = authenticate(username=email, password=password) 
+1

. Мне не хватало настроек для Authentication Backends –

+1

, можете ли вы уточнить эту настройку? Я чувствую, что у меня может быть такая же проблема – mgPePe

+0

, пожалуйста, см. Ответ Рамаста выше. Я отметил это как ответ. –

1

Интересно, что check_password возвращает Правда в следующем:

eml = "[email protected]" 
pw = "pass" 
uname = 'w2' 
user = User.objects.create_user(uname,eml,pw) 
user.save() 
log.debug("Password check passes?") 
log.debug(user.check_password(pw)) # Logs True!!! 
user = authenticate(username=uname, password=pw) 
1

В settings.py, добавьте

AUTH_USER_MODEL = your custom user class 

например, если имя Джанго приложения офис и пользовательские пользовательский класс Account затем

AUTH_USER_MODEL = 'office.Account' 
Смежные вопросы