Основная ошибка аутентификации Django - PullRequest
0 голосов
/ 30 июня 2018

Я установил базовую аутентификацию, но при входе в систему, которая не выдает никакой ошибки, если я возвращаю что-то, я получаю сообщение об ошибке -

{'session_key': ['Session with this Session key already exists.']}

Это код:

def header_auth(request):
    auth_header = request.META['HTTP_AUTHORIZATION']
    encoded_credentials = auth_header.split(' ')[1]  # Removes "Basic " to isolate credentials
    decoded_credentials = base64.b64decode(encoded_credentials).decode("utf-8").split(':')
return decoded_credentials[0], decoded_credentials[1]


def login_view(request):
    username, password = header_auth(request)
    user = authenticate(request, username=username, password=password)
    if user is not None:
        try:
            login(request, user)
            print('after login')
        except Exception as e:
            print('login error', e)
        return HttpResponse('Authorized', status=200)
    else:
        return HttpResponse('Not Authorized', status=403)


def logout_view(request):
    logout(request)


class FyndUser(AbstractUser):
    company_id = models.IntegerField(unique=True)

Если я отправил объект пользователя вместо Response, то получаю ошибку, что у объекта пользователя нет атрибута get.

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Я столкнулся с той же ошибкой после переопределения сигнала pre_save, чтобы сделать full_clean, как предложено здесь . Для тех, кто хочет сохранить переопределение сигнала, вы можете ограничить уязвимые модели, чтобы аутентификация Django по умолчанию все еще работала

from django.db.models.signals import pre_save
from django.dispatch import receiver

@receiver(pre_save)
def pre_save_handler(sender, instance, *args, **kwargs):
    """Override signal to validate fields of selected models before saving."""
    user_models = ['MyModel1', 'MyModel2', ...]
    if sender in user_models:
        instance.full_clean()
0 голосов
/ 30 июня 2018

Есть ошибка. Я настроил сигнал pre_save для всех моделей, чтобы сделать full_clean. Таким образом, перед сохранением выполняется полная очистка всех моделей. Это терпело неудачу здесь -

env/lib/python3.6/site-packages/django/db/models/base.py in full_clean
line 1166 at raise ValidationError(errors)

Удаление сигнала сработало, но я до сих пор не знаю, в чем проблема.

...