2016-03-29 2 views
0

Я написал пользовательскую страницу для создания нового пользователя. Пользователь успешно создается, однако, если я попытаюсь войти с правильными учетными данными, аутентификация вернет None.Django Создание пользователя успешно, но authenticate() return None

Если я зашел в Администратор Django, я могу создать новый пароль для пользователя, которого я только что создал, а затем войти в систему успешно. есть идеи?

Создать пользователя Функция:

def create_account(request): 
if request.method == "POST": 
    # Default User Fields 
    username = request.POST['username'] 
    password = request.POST['password'] 
    email = request.POST['email'] 
    first_name = request.POST['first_name'] 
    last_name = request.POST['last_name'] 


    try: 
     user = User.objects.create_user(username,email,password,first_name=first_name, last_name=last_name) 
     user.save() 
     user_profile = models.User_Profile.objects.create_user_profile(user) 
     user_profile.save() 
     response = {'success': True} 
     return HttpResponse(json.dumps(response)) 
    except Exception, e: 
     response = {'success': False} 
     return HttpResponse(json.dumps(response)) 

Войти функции:

def site_login(request): 
#TODO: GET THIS WORKING 
if request.method == "POST": 
    user = authenticate(username=request.POST['username'], password=request.POST['password']) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      response = {'success':True} 
      return HttpResponse(json.dumps(response)) 
     else: 
      response = {'success':False,'message':'Account has been disabled.'} 
      return HttpResponse(json.dumps(response)) 
    else: 
     response = {'success':False,'message':'Invalid username or password.'} 
     return HttpResponse(json.dumps(response)) 
+0

Возможный дубликат http://stackoverflow.com/a/23482284/4143613 – erajuan

+0

не дублируется. Я не получаю исключения. –

ответ

0

Вы должны использовать set_password при создании пользователя (https://docs.djangoproject.com/en/1.9/ref/contrib/auth/#django.contrib.auth.models.User.set_password). Попробуйте сделать:

def create_account(request): 
    if request.method == "POST": 
     # Default User Fields 
     username = request.POST.get('username') 
     password = request.POST.get('password') 
     email = request.POST.get('email') 
     first_name = request.POST.get('first_name') 
     last_name = request.POST.get('last_name') 

     try: 
      # illustrating it out for you 
      user = User() 
      user.username = username 
      user.email = email 
      user.set_password(password) 
      user.first_name = first_name 
      user.last_name = last_name 
      user.save() 
      user_profile = models.User_Profile.objects.create_user_profile(user) 
      user_profile.save() 
      response = {'success': True} 
      return HttpResponse(json.dumps(response)) 
     except Exception, e: 
      response = {'success': False} 
      return HttpResponse(json.dumps(response)) 
+0

Даже после добавления set_password, я все еще вижу «None» –

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