Django объект входа 'NoneType' не имеет атрибута 'append' - PullRequest
0 голосов
/ 17 апреля 2020

Возникла проблема с Django Аллах. Когда я выхожу из одного пользователя и снова вхожу с другим, я получаю эту проблему, как локальную, так и в производственную.

Я использую последнюю версию Allauth, Django 3.0.5, и Python 3.7.4.

Кажется, это проблема Аллаута, но я не видел, чтобы о ней сообщали в Интернете где-либо еще. Так что просто интересно, что я могу сделать дальше для устранения неполадок. Логин работает нормально, меньше я только что вышел из системы другого пользователя.

'NoneType' object has no attribute 'append'
Request Method: POST
Request URL:    http://127.0.0.1:8000/account/login/
Django Version: 3.0.5
Exception Type: AttributeError
Exception Value:    
'NoneType' object has no attribute 'append'
Exception Location: /Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/allauth/account/adapter.py in authentication_failed, line 507
Python Executable:  /Users/[USERDIR]/Sites/frontline/venv/bin/python
Python Version: 3.7.4
Python Path:    
['/Users/[USERDIR]/Sites/frontline',
 '/Users/[USERDIR]/Sites/frontline/venv/lib/python37.zip',
 '/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7',
 '/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/lib-dynload',
 '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7',
 '/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages',
 '/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/odf',
 '/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/odf',
 '/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/odf',
 '/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/odf',
 '/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/odf',
 '/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/odf',
 '/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/odf']
Server time:    Thu, 16 Apr 2020 17:53:52 -0700

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/account/login/

Django Version: 3.0.5
Python Version: 3.7.4
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'django.contrib.sites',
 'django.contrib.sitemaps',
 'django.contrib.postgres',
 'common',
 'bootstrap4',
 's3direct',
 'bootstrap_datepicker_plus',
 'import_export',
 'tinymce',
 'allauth',
 'allauth.account',
 'allauth.socialaccount',
 'debug_toolbar',
 'dashboard',
 'marketing']
Installed Middleware:
('debug_toolbar.middleware.DebugToolbarMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware')



Traceback (most recent call last):
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/django/utils/decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/django/views/decorators/debug.py", line 76, in sensitive_post_parameters_wrapper
    return view(request, *args, **kwargs)
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/allauth/account/views.py", line 138, in dispatch
    return super(LoginView, self).dispatch(request, *args, **kwargs)
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/allauth/account/views.py", line 81, in dispatch
    **kwargs)
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/django/views/generic/base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/allauth/account/views.py", line 103, in post
    if form.is_valid():
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/django/forms/forms.py", line 180, in is_valid
    return self.is_bound and not self.errors
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/django/forms/forms.py", line 175, in errors
    self.full_clean()
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/django/forms/forms.py", line 377, in full_clean
    self._clean_form()
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/django/forms/forms.py", line 404, in _clean_form
    cleaned_data = self.clean()
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/allauth/account/forms.py", line 179, in clean
    **credentials)
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/allauth/account/adapter.py", line 497, in authenticate
    self.authentication_failed(request, **credentials)
  File "/Users/[USERDIR]/Sites/frontline/venv/lib/python3.7/site-packages/allauth/account/adapter.py", line 507, in authentication_failed
    data.append(time.mktime(dt.timetuple()))

Exception Type: AttributeError at /account/login/
Exception Value: 'NoneType' object has no attribute 'append'

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Глядя на allauth код ,

def authentication_failed(self, request, **credentials):
  if app_settings.LOGIN_ATTEMPTS_LIMIT:
    cache_key = self._get_login_attempts_cache_key(
      request, **credentials
    )
    data = cache.get(cache_key, [])
    dt = timezone.now()
    data.append(time.mktime(dt.timetuple()))
    cache.set(cache_key, data, app_settings.LOGIN_ATTEMPTS_TIMEOUT)

, кажется, что по какой-то причине в кеше хранится значение None для ключа попыток входа в систему (обратите внимание, что это игнорируя значение по умолчанию, []). * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '' '' * '*] 1011 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * . Редактировать: теперь я думаю, что это невозможно, поскольку код Django просто устанавливает значение по умолчанию , если результат равен None, независимо от того, действительно ли это или ключ отсутствует, из-за ограничений python-memcached ). Это очень странное поведение, вы можете просто отключить эту функцию, как предложено в комментариях, но это, кажется, основная проблема, которая ждет укуса.

0 голосов
/ 17 апреля 2020

Поместите ваши allauth пакеты на вершину установленных приложений и попробуйте снова. Это может быть проблемой конфликтов, поскольку пакет django.contrib.auth по умолчанию находится на вершине иерархии, а когда django просматривает установленные приложения, он останавливается на первом, соответствующем его критериям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...