2016-10-19 5 views
0

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

# создание пользователя:

def create_user(request): 
    if request.method == 'POST': 
     user_info = forms.UserInfoForm(request.POST) 
     if user_info.is_valid(): 
      cleaned_info = user_info.cleaned_data 
      User.objects.create_user(username=cleaned_info['username'], password=cleaned_info['password']) 
    render(.......) 

Это работает. Я могу проверить auth_user, и я вижу имя пользователя и пароль вместе со всеми другими созданными и добавленными полями.

Теперь я пытаюсь выполнить аутентификацию пользователя со следующим кодом после создания пользователя с username = 'testcase' и password = 'test': с использованием вышеуказанного кода.

# Аутентифицировать Пользователь

def get_entry(request): 
    if request.method == 'POST': 
     user = authenticate(username='testcase', password='test') 
     if user: 
      ......... 

Пользователь всегда возвращается, как никто. Что происходит? Я запускаю django 1.10.2.

Update:

Я могу видеть созданные пользователем функцией CREATE_USER, когда я войти администратора. Статус не был персоналом (как и предполагалось). Я изменил это на персонал, чтобы узнать, вызывает ли это проблему, но метод get_entry не дает никому для пользователя. Это расстраивает. Я не знаю, что я делаю неправильно.

+0

Я этого не делаю. Я думал, что метод create_user() позаботится об этом на фоне. И поскольку я мог видеть пользователя, созданного в auth_users, он сохраняется. Я не знаю, есть ли что-то еще, что метод .save() делает на фоне. –

+0

Вместо теста попробуйте вставить хешированный пароль, сохраненный в атрибуте пароля таблицы auth_user. –

+0

аутентифицировать автоматически хэширует пароль, прежде чем он сделает какое-либо сравнение. Я не думаю, что хеширование необходимо. –

ответ

0

Сохранить пользователь в один вар, а затем вызвать user.save(), потому что пользователь не может вызвать метод Save() попробовать:

def create_user(request): 
     if request.method == 'POST': 
      user_info = forms.UserInfoForm(request.POST) 
      if user_info.is_valid(): 
       cleaned_info = user_info.cleaned_data 
       user = User.objects.create_user(username=cleaned_info['username'], password=cleaned_info['password']) 
       user.save() 
     render(.......) 

Тогда вам нужно вызвать auth.authenticate в вашем function get_entry:

def get_entry(request): 
    if request.method == 'POST': 
     user = auth.authenticate(username='testcase', password='test') 
     if user: 
      ......... 
+2

Вам не нужно вызывать 'save()' после вызова 'create_user()': https://docs.djangoproject.com/en/1.10/topics/auth/default/#creating-users – Kevin

0

Ваш код выглядит правильным.

Проблема может быть в том, как Титулы в настоящее время передается на ваш create_user зрения (Param переходящая в get_entry зрения весьма маловероятно, чтобы быть проблемой, так как PARAMS username и password жестко закодированы).

Попробуйте выполнить печать из username и password перед передачей их User.objects.create_user(), так как возможно, что password поле не сохраняется должным образом и/или пустой password это передается, и Django может создать хэш для пустого пароля.

P.S .: Это просто спекуляция, вам нужен ответ на этот вопрос для дальнейшей диагностики проблемы.

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