как войти с электронной почтой / именем пользователя в django? - PullRequest
0 голосов
/ 15 мая 2019

Здесь я хочу войти в систему с помощью электронной почты или комбинации имени пользователя и пароля. Я написал этот код. Но этот код работает только для имени пользователя и пароля. Я добавил файл backends.py в папку приложения, но этот файл не работает. Как я могу включить функцию электронной почты при входе с этим кодом. Может ли кто-нибудь помочь мне отредактировать этот код? Тип исключения: TypeError Значение исключения:
EmailAuthBackend () не принимает аргументов

views.py

from students.backends import EmailAuthBackend as authenticate
    def loginuser(request):
        if request.method == "POST":
            form = LoginForm(request.POST)
            username = form['username'].value()
            password = form['password'].value()
            user = authenticate(username=username, password=password) # here from where i have to import authenticate.
            if user and user.is_superuser:
                login(request, user)
                redirect_url = request.GET.get('next', 'students:home')
                messages.info(request, 'You are logged in as an admin .')
                return redirect(redirect_url)
            elif user and user.is_staff:
                login(request, user)
                redirect_url = request.GET.get('next', 'students:home')
                messages.info(request, 'You are logged in as a staff member.')
                return redirect(redirect_url)
            elif user and not user.is_active:
                messages.info(request, 'Your account is not active.')
            else:
                messages.error(request,'Invalid Username and Password')
        else:
            form = LoginForm()
        return render(request, 'students/login.html', {'form': form})

forms.py

class RegisterForm(UserCreationForm):
    def clean_email(self):
        email = self.cleaned_data['email']
        if User.objects.filter(email=email).exists():
            raise ValidationError('Email Already Exists')
        return email

    class Meta:
        model = User
        fields = ['username', "email", "password1", "password2",'is_superuser','is_staff','is_active']
class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

шаблон

<form method="post" class="form-signin">
                  {% csrf_token %}
                Username or Email:<input type="text" name="username" class="form-control mb-2" placeholder="Username or Email" >
                Password:<input type="password" name="password" class="form-control mb-2" placeholder="Password" >
                <button class="btn btn-lg btn-primary btn-block mb-20" type="submit">Log in</button>
                    <center><b><a href="{% url 'students:password_reset' %}" class="small">Forgot Password ?</a></b></center>
              </form>

backends.py

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User


class EmailAuthBackend(ModelBackend):
    def authenticate(self, username=None, password=None,**kwargs):

        try:
            user = User.objects.get(email=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            try:
                user = User.objects.get(username=username)
                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

settings.py

AUTHENTICATION_BACKENDS = ('students.backends.EmailAuthBackend',)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...