2015-02-19 2 views
1

Я использую встроенную систему аутентификации django. Кажется, все работает нормально. Есть два поля, которые пользователь запрашивает для ввода во время регистрации: username и email. При входе в систему они должны ввести username и password.Способ использования электронной почты в качестве поля аутентификации?

Я хотел был бы изменить это поведение так, что поле имени пользователя исчезнет. Я хочу обработать электронное письмо как имя пользователя пользователя. Таким образом, при подписании пользователь должен будет поставить email/password

Возможно ли это, используя встроенную систему авторизации django? Я на Джанго 1.7

Update

я имел необходимость добавить дополнительные поля, так что я добавил следующее models.py

от импортных моделей django.db от django.contrib. auth.models импорт пользователя

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    telephone_number = models.CharField(max_length=100) 
    website_url = models.CharField(max_length=100) 

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0]) 
+0

Это конкретно рассматривается в [документации] (HTTPS://docs.djangoproject.com/en/1.7/topics/auth/customizing/#substituting-a-custom-user-model). –

+0

@ DanielRoseman Я просмотрел документацию, но я уже сделал дополнительную модель, потому что мне нужно добавить дополнительные поля. См. Обновленный раздел вопроса – birdy

ответ

0

ответ прямо в django documentation, в коротких словах, вы должны создать подкласс AbstractBaseUser или AbstractUser (во втором случае вы не можете полностью удалить поле имени пользователя), создайте свой собственный пользовательский менеджер на основе BaseUserManager или UserManager и настройте встроенные формы auth, если вы его используете (или любое приложение, которое вы используете, использует его).

+0

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

+1

@birdy вы создали модель UserProfile. Вам нужно создать новую модель пользователя и новый UserManager, чтобы полностью исключить это поле. Кроме того, вам нужно будет реализовать пользовательские представления для регистрации и входа в систему – Alvaro

+0

Создание дополнительной модели и переопределение модели пользователя по умолчанию - это не то же самое. Вы можете сделать то и другое, но вы должны исправить внешний ключ для модели пользователя в своей модели профиля. – GwynBleidD

0

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

В любом случае вы хотите, чтобы электронные письма были уникальными, поскольку django не проверяет это по умолчанию.

Для этого вам необходимо переопределить учетную запись по умолчанию. Вы можете создать что-то вдоль линий:

class EmailUsernameLoginView(View): 

    def post(self, request): 
     next = request.POST.get('next', None) 
     username = request.POST.get('username', None) 
     password = request.POST.get('password', None) 
     error = '' 
     if username and password: 
      try: 
       usr = User.objects.get(email=username) 
       username = usr.username 
      except User.DoesNotExist: 
       pass # If the user doesn't exist, it's an username 
      user = authenticate(username=username, password=password) 
      if user is not None: 
       if user.is_active: 
        login(request, user) 
        return redirect(next) 
       else: 
        error = 'Your account is not active' 
      else: 
       error = 'The username/email - password comb is wrong' 
     else: 
      error = 'Please provide a username/email and password' 
     ctx = {'error': error} # Fill with needed feedback 
     return render(request, ctx, 'registration/login.html') 

Это только проект, и вы, вероятно, следует включать в себя форму, чтобы помочь с проверкой/очистки

+0

Но это все равно потребует от пользователей ввода имени пользователя и электронной почты при регистрации. – birdy

+0

Конечно. Вам придется переопределить многое наоборот. – Alvaro

+1

При сохранении пользователя вы также можете создать определенное имя пользователя (случайное или в зависимости от поля электронной почты). – GwynBleidD

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