@lukepker

Как починить страницу логина в джанго?

Здравствуйте!
Есть страница логина:
<form class="form-signin" method="post">
  {% csrf_token %}
  <input type="hidden" name="next" value="{{ next }}">
  <img class="mb-4" src="{% static "logo.svg" %}" alt="" width="72" height="72">


  <h1 class="h3 mb-3 font-weight-normal">Вход</h1>
  <label for="inputEmail" class="sr-only">Email</label>
  <input type="email" id="inputEmail" class="form-control" placeholder="Email" name="username"
         value="" required="" autofocus="" data-cip-id="inputEmail">
  <label for="inputPassword" class="sr-only">Password</label>
  <input type="password" id="inputPassword" class="form-control" placeholder="Пароль"
         name="password" required="" data-cip-id="inputPassword">

  <button class="btn btn-lg btn-primary btn-block" type="submit">Войти</button>
  <p class="mt-5 mb-3 text-muted">© Просто магазин 2018</p>
</form>

вот так она прописана в урлах
path('login/', views.LoginView.as_view(), name='login')

в сеттингс прописано LOGIN_REDIRECT_URL = '/' для редиректа на главную
Так вот, проблема:
если создать юзера а потом попробовать залогиниться, то при нажатии кнопки страница просто обновляется, вход не происходит
я предполагаю дело в том что ввожу не логин а емейл, но как это поправить? как сделать чтобы был вход именно по мылу и паролю? (юзер стандартный)
  • Вопрос задан
  • 206 просмотров
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Написать бэкенд аутентификации:
class EmailAuthenticationBackend(ModelBackend):
    def authenticate(self, request, email=None, password=None):
        try:
            user = User.objects.get(email=email)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            return None

    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None
Ответ написан
@mrxor
Simple is better than complex
Чтобы использовать email вместо username
1. Определите свою модель юзера с USERNAME_FIELD = 'email'
Пример:
class User(AbstractUser):
    """User model."""
    
    username = None  # Можете выпилить username если он вам не нужен
    email = models.EmailField(_('email address'), unique=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []


2. В settings.py добавьте AUTH_USER_MODEL = 'YOUR_APP.User'

Ссылки по теме:
Раз
Два
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы