2016-05-16 1 views
0

Я пишу собственный django auth backend, который отправляет почтовый запрос с информацией о имени пользователя и пароле на сервер, а сервер отвечает на некоторые данные о пользователе, если пароль для входа/пароля правильный (403 ответ в противном случае)Пользовательский django auth backend не регистрирует пользователя с базовым окном просмотра

Код работает нормально, создайте пользователя, если он еще не существует, а затем возвращает пользователя (прошедшие модульные тесты). Тем не менее, вид Логин по умолчанию не регистрирует пользователя в
Вот код для внутреннего интерфейса:.

from django.contrib.auth import get_user_model 
import requests 

User = get_user_model() 


class CustomAuthBackend(): 
    def authenticate(self, username, password): 
     response = requests.post(
      LOGIN_SERVER_URL, 
      data={'username': username, 'password': password} 
     ) 
     if response.status_code == 200: 
      try: 
       return User.objects.get(username=username) 
      except User.DoesNotExist: 
       user = User.objects.create_user(
        username=username, 
        password=password 
       ) 
       user_data = response.json()['user'] 
       user.last_name = user_data['last_name'] 
       user.first_name = user_data['first_name'] 
       user.email = user_data['email'] 
       user.save() 
       return user 

    def get_user(self, username): 
     try: 
      return User.objects.get(username=username) 
     except User.DoesNotExist: 
      return None 

И вызов для вида входа (обычай форма просто иметь заполнители на форме) :

from django.conf.urls import url 
from django.contrib.auth.views import logout, login 
from accounts.forms import CustomAuthenticationForm 

url(
     r'^login$', 
     login, 
     { 
      'template_name': 'login.html', 
      'authentication_form': CustomAuthenticationForm 
     }, 
     name='login' 
    ), 

Я потратил немало времени на отслеживание причин, по которым пользователь не вошел в систему, без каких-либо успехов.
Есть ли кто-нибудь, кто просветит меня по этому вопросу? Благодаря !

ответ

0

Согласно the docs, метод get_user должен принять первичный ключ модели в качестве аргумента:

def get_user(self, user_id): 
    try: 
     return User.objects.get(pk=user_id) 
    except User.DoesNotExist: 
     return None 
+1

Это сделал трюк, я забыл, что имя пользователя в модели пользователя Джанго не является первичным ключом , Большое спасибо ! – Kirogo

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