2016-03-18 2 views
0

Я знаю, что есть документация по этому вопросу здесь https://docs.djangoproject.com/en/1.9/topics/auth/customizing/, однако мне нужно уточнить мой вариант использования.Пользовательская аутентификация с пользовательским пользователем в django?

У меня в основном есть api, который я создал. То, что это api делает, представляет данные пользовательской формы на внешний URL-адрес, а после отправки данные сохраняются в эту внешнюю базу данных URL-адресов.

Затем я могу получить конкретного пользователя через другой вызов api. Пользователь возвращается как объект. Теперь я пытаюсь зарегистрировать этого пользователя в моем конце, используя django.contrib.auth через мою систему, но то, что у меня есть, не работает.

Вот мой процесс:

A. Я добавил пользовательский бэкенд аутентификации в мой settings.py файл

AUTHENTICATION_BACKENDS =(
    'new_app.backends.SettingsBackend', 
    'django.contrib.auth.backends.ModelBackend', 
) 

B. В файле бэкэнд моей new_app, я следующий код:

class SettingsBackend(object): 
    def authenticate(self, username=None, password=None): 
      if username and password: 
       user = api.get_user() 
       #add pk to user object to satisfy django error warning 
       user.pk = user.unique_field 
       return user 
      return None 

    def get_user(self, user_id): 
     try: 
      if self.user.pk == user_id: 
       return self.user 
     except: 
      return None 

в представлении зарегистрировались, я пытаюсь войти пользователю в использовании этого:

def login_user(request, username, password): 
    from django.contrib import auth 
    if not username and password: 
     raise ValueError("Invalid username and password") 

    auth_user = auth.authenticate(username=username, password=password) 

    if auth_user is None: 
     raise ValueError("Invalid username and password") 

    auth.login(request, auth_user) 
    return auth_user 

я получаю высказывание об ошибке:

'api.get_user()' object has no attribute 'save' 

Ошибка, протекающие на auth.login(request, auth_user) линии.

Я думаю, причина в том, что django.contrib.auth считает, что мой пользовательский объект является моделью django. Итак, вопрос в том, как я должен заниматься этим, чтобы он работал с учетом моего сценария? Спасибо за время.

+0

Вы указали измененную модель пользователя в настройках? – RA123

+0

@ RA123 спасибо за ответ. Я не сделал этого, потому что это не типичная модель пользователя django, поэтому я думал, что это не обязательно. Я чувствую, что я близок, но мне, возможно, не следует использовать django.contrib.auth и сделать свой собственный метод auth, но это то, где мне нужно руководство. – user875139

+0

Пожалуйста, сначала установите AUTH_USER_MODEL = 'user_custom.MyUser', если вы не используете модель пользователя django – RA123

ответ

0

Я не эксперт в тонкостях джанго (так как это было какое-то время, когда я покинул джанго для микрокадров).

Было сказано, что если бы я был вами, я должен был убедиться, что все, что возвращается api.get_user(), реализовать любой API django, ожидающий от этого объекта, что означает, начиная с пустого метода save().

Но я также делаю стандартный материал django, например, @ RA123 предлагает в комментарии, установив AUTH_USER_MODEL вверх.

+0

спасибо за ввод! Взгляни на это сейчас. Поставит ответ, когда у меня будет работа. – user875139

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