Не уверен, если вы видите какие-либо проблемы, потому что вы не упоминаете о них, но я использую mongoengine для моей аутентификации, и вот как я бы справился:
from django.contrib.auth import login, User
from mongoengine.queryset import DoesNotExist
def login_view(request):
try:
user = User.objects.get(username=request.POST['username'])
if user.check_password(request.POST['password']):
user.backend = 'mongoengine.django.auth.MongoEngineBackend'
login(request, user)
request.session.set_expiry(60 * 60 * 1) # 1 hour timeout
return HttpResponse(user)
else:
return HttpResponse('login failed')
except DoesNotExist:
return HttpResponse('user does not exist')
except Exception
return HttpResponse('unknown error')
Вы говорите, что пользователь не сохранен в запросе ... если вы имеете в виду, что он недоступен в шаблонах, вам нужно добавить обработчик контекста шаблона аутентификации в ваши настройки (в дополнение к настройке AUTHENTICATION_BACKENDS, которую вы уже установили) :
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.contrib.auth.context_processors.auth',
...
)
Чтобы привязать пользователя к последующим запросам после входа в систему, установите AuthenticationMiddleware
, и пользователь будет атрибутом request
во всех ваших представлениях:
MIDDLEWARE_CLASSES = (
...
'django.contrib.auth.middleware.AuthenticationMiddleware',
...
)