2012-04-25 5 views
4

Поскольку я не использую пользователя Auth из Django, у меня есть собственная модель CustomUser, и я хочу сделать аутентификацию на сайте с помощью этой модели (CustomUser не наследует модель User и не связан с ней по все).Django custom User authentication authentication

class CustomUser(models.Model): 
    password = models.CharField(max_length = 40) 
    email = models.EmailField(max_length = 72, unique = True) 
    #stuff... 

Я проверил https://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend и главное, что я не понимаю:

from django.contrib.auth.models import User 

Мне нужно импортировать Django пользователя, если я хочу использовать CustomUser ли?

Я не могу найти хороший учебник, в котором объясняется, как вы можете использовать Django без стандартного пользователя Auth.

* Редактировать: Я знаю, что могу продлевать с пользователем. Но я просто этого не хочу. Вопрос не в том, что это лучший способ использовать пользователя и хранить дополнительную информацию и т. Д. И т. Д. Однако я это ценю. НО, как я могу использовать пользовательский пользователь без использования пользователя Auth. Даже если у меня нет причин. *

Если возможно, я хочу знать как.

+0

Что вы подразумеваете под «использованием пользовательского пользователя»? Сможете ли вы использовать декоратор 'login_required'? Да, если ваш 'CustomUser' предоставляет' is_authenticated' метод, не перегружайте его. Сможете ли вы использовать разрешения? Нет. И так далее. Какую часть системы Django вы хотите использовать? – DrTyrsa

+0

Обычно вы должны использовать Auth User для создания пользователей. Я использую CustomUser для создания пользователей, как показано выше. Я хочу использовать login_required и is_authenticated. Нет разрешений. – nelsonvarela

+0

Я сошел с ума, пытаясь ответить на это сам. Мне нужен как пользователь Auth, так и пользовательская учетная запись Auth. Я слышал, как все говорили: «Поместите его в таблицу« Пользователь »и настройте группу« Учетная запись », но я этого не хочу. Что случилось с вами @nelsonvarela? Вы когда-нибудь находили ответ, который искали? –

ответ

1

Вся система Django auth тесно связана с django.contrib.auth.models.User, поэтому вы должны использовать ее в бэкэнд. Цитирование Django docs

В настоящем время, лучший способ справиться с этим, чтобы создать Джанго объекта пользователя для каждого пользователя, который существует для внутреннего интерфейса

Но главный вопрос здесь: что такого особенного в вашем CustomUser, что вы не можете реализовать с нормальной моделью User (может быть продлено)? В 99% случаев использование User - лучший способ.

+1

У меня нет особой причины. Я просто хочу знать, как я могу это сделать. – nelsonvarela

+2

Я бы мог подумать, что это будет проверка подлинности устройства. У меня может быть служба, которая должна аутентифицировать устройства и пользователей. – Erik

0

Отметьте это сообщение.

Большинство проектов Django, над которыми я работал, должны хранить информацию о каждом пользователе в дополнение к стандартным именам и адресам электронной почты, хранящимся в модели contrib.auth.models.User.

Если вы используете багажник с ревизией 7477 (26 апреля 2008 г.), ваши классы моделей могут наследовать от существующего класса модели. Дополнительные поля хранятся в отдельной таблице, которая связана с таблицей базовой модели. Когда вы извлекаете свою модель, запрос использует соединение для получения полей от него и базовой модели.

http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/

И этот пост.

Скопируйте приложение auth в свой собственный проект и внесите в него изменения. Это позволяет избежать некоторых проблем, связанных с обслуживанием, но устраняет утилиту Django, объединяющую систему auth в первую очередь. Это также может вызвать проблемы совместимости с другими приложениями, которые ожидают, что модель User будет находиться в django.contrib.auth.

http://www.b-list.org/weblog/2006/jun/06/django-tips-extending-user-model/

+0

Вы можете процитировать некоторые важные моменты ссылки, чтобы показать людям, что это такое, прежде чем они нажмут на ссылку. – okm

0

Возможно, это ответ на ваш вопрос:

С 'https://docs.djangoproject.com/en/1.6/topics/auth/customizing/#substituting-a-custom-user-model':

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

Django позволяет переопределить модель пользователя по умолчанию, указав значение для параметра AUTH_USER_MODEL, который ссылается на пользовательскую модель:

AUTH_USER_MODEL = «» myapp.MyUser Эта точечная пара описывает имя приложения Django (который должен находиться в вашем INSTALLED_APPS) и имя модели Django, которую вы хотите использовать в качестве модели пользователя.

Конечно, есть некоторые необходимые предупреждения, чтобы рассмотреть (доступные по ссылке выше), но это выглядит как хороший ответ на ваш вопрос: https://docs.djangoproject.com/en/1.6/ref/settings/#auth-user-model

Есть также некоторые ожидания пользовательской модели соответствия, чтобы рассмотреть (слишком много, чтобы перечислить здесь): https://docs.djangoproject.com/en/1.6/topics/auth/customizing/#specifying-a-custom-user-model

Если не может быть больше, чем одно значение для AUTH_USER_MODEL (я сомневаюсь, что в здравом уме), то я думаю, что мне нужно будет построить свой собственный бэкенд пользовательские аутентификации: https://docs.djangoproject.com/en/1.6/topics/auth/customizing/#writing-an-authentication-backend

Я надеюсь, что это поможет другим потерянным душам, которым нужны разные схемы аутентификации пользователей и устройств (возможно, из-за некоторых ранее существовавших спецификаций, которые делают беспорядочным, что может быть легкомысленным).

Cheers!