Пользовательская аутентификация по-прежнему требует входа на сайт администратора
Я создаю пользовательскую модель пользователя с возможностью использования имени пользователя или электронной почты для входа. Я создал пользовательскую функцию входа и могу нормально войти на сайт, но она все равно требует повторного входа, когда я пытаюсь получить доступ к сайту администратора (даже если пользователь имеет привилегии администратора).
Есть идеи, в чем может быть проблема?
Модель пользователя
class User(AbstractUser):
status = models.CharField(max_length=100,blank=True)
class Meta:
db_table='auth_user'
Backend
class BothAuthBackend(object):
def authenticate(self, loginDetail=None, password=None):
try:
user = UserModel.objects.get(email=loginDetail)
except:
user = None
if user == None:
try:
user = UserModel.objects.get(username=loginDetail)
except:
user = None
try:
if user.check_password(password):
return user
except UserModel.DoesNotExist:
return None
def get_user(self, user_id):
try:
return UserModel.objects.get(pk=user_id)
except UserModel.DoesNotExist:
return None
Вид функции
def login(request):
if request.method == 'GET':
form = LoginForm2()
return render(request,'users/login.html',{'form': form})
if request.method == 'POST':
form = LoginForm2(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = BothAuthBackend.authenticate(request, loginDetail=username, password=password)
if user is not None:
return render(request,'users/afterLogin.html')
else:
return render(request, 'users/login.html', {'form': LoginForm2()})
else:
form = LoginForm2()
return render(request,'users/login.html',{'form': form})
Настройки
AUTH_USER_MODEL = 'users.User'
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend','users.backends.BothAuthBackend']
Нашел собственное решение,
Нужно импортировать это в представления (и изменить имя функции представления)
from django.contrib.auth import login
Затем в методе представления
if user is not None:
login(request,user)
return redirect('users:afterLogin')
Также необходимо только 'users.backends.BothAuthBackend' в файле настроек