Когда я развертываю свой сайт django на сервере Ubuntu 18.04, я обнаружил, что использование python manage.py runserver работает хорошо, но когда я использую uwsgi для запуска этого сайта django, ошибка unsupported hash type продолжает возникать при отправке моей формы входа.
Среда: Ubuntu 18.04 / anaconda3 (используйте conda для управления virtualenvs) /python3.6/uwsgi2.0.17/django2.0/
деталь ошибки: отсюда и возникло исключение: user = authenticate(username=username, password=password)
Тип исключения: ValueError
Значение исключения:
неподдерживаемый тип хэша
мой ini файл uwsgi:
[uwsgi]
chdir = /www/wwwroot/django-xxx/
plungins = python,gevent
socket = 127.0.0.1:8080
module = apps.wsgi:application
gevent-early-monkey-patch = True
gevent-wait-for-hub = True
gevent = 10
workers = 3
master = True
vacuum = True
user = root
logto = /www/wwwroot/django-xxx/uwsgi.log
Выслеживать:
File "/anaconda3/envs/django-sspanel-7/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
35. response = get_response(request)
File "/anaconda3/envs/django-sspanel-7/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "/anaconda3/envs/django-sspanel-7/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "./apps/sspanel/views.py" in user_login
94. user = authenticate(username=username, password=password)
File "/anaconda3/envs/django-sspanel-7/lib/python3.7/site-packages/django/contrib/auth/__init__.py" in authenticate
70. user = _authenticate_with_backend(backend, backend_path, request, credentials)
File "/anaconda3/envs/django-sspanel-7/lib/python3.7/site-packages/django/contrib/auth/__init__.py" in _authenticate_with_backend
115. return backend.authenticate(*args, **credentials)
File "/anaconda3/envs/django-sspanel-7/lib/python3.7/site-packages/django/contrib/auth/backends.py" in authenticate
22. if user.check_password(password) and self.user_can_authenticate(user):
File "/anaconda3/envs/django-sspanel-7/lib/python3.7/site-packages/django/contrib/auth/base_user.py" in check_password
111. return check_password(raw_password, self.password, setter)
File "/anaconda3/envs/django-sspanel-7/lib/python3.7/site-packages/django/contrib/auth/hashers.py" in check_password
50. is_correct = hasher.verify(password, encoded)
File "/anaconda3/envs/django-sspanel-7/lib/python3.7/site-packages/django/contrib/auth/hashers.py" in verify
256. encoded_2 = self.encode(password, salt, int(iterations))
File "/anaconda3/envs/django-sspanel-7/lib/python3.7/site-packages/django/contrib/auth/hashers.py" in encode
249. hash = pbkdf2(password, salt, iterations, digest=self.digest)
File "/anaconda3/envs/django-sspanel-7/lib/python3.7/site-packages/django/utils/crypto.py" in pbkdf2
85. return hashlib.pbkdf2_hmac(digest().name, password, salt, iterations, dklen)
обновление: мои дальнейшие исследования 1. перейти на ubuntu 16.04 без каких-либо других изменений, не работает; 2. Измените способ установки uwsgi, проблема решена: исходный способ установки uwsgi заключался в установке gcc 4.7 и использовании его для установки uwsgi (установка не выполняется, если я устанавливаю uwsgi напрямую, потому что версия gcc слишком высока согласно моим результатам в Google). Пробую conda установить uwsgi, наконец эта проблема исчезает.
Вы уверены, что uwsgi использует ваш virtualenv ???
@brunodesthuilliers Я запускаю source activate virtualenv_name в моем bash, а затем uwsgi -i uwsgi.ini, я думаю, что virtualenv используется таким образом, верно?
@AnushaPrasanth Я еще не использовал супервизора, но собираюсь, после того, как эта ошибка будет устранена
@Eubur У меня нет опыта работы с conda / anaconda, но с ванильным Python это должен быть source /path/to/yourvirtualenv/bin/activate. Но, перечитав вашу трассировку, я вижу, что путь к libs начинается с "/ anaconda3 / envs / django-sspanel-7", поэтому я не могу сказать наверняка ... Вы говорите, что он "хорошо работает" с сервером разработки, но пробовали ли вы войти в систему при запуске сервера разработки? Если нет, то, возможно, отсутствует какой-то пакет, иначе я понятия не имею.
@brunodesthuilliers Я пробовал войти в систему с dev-сервером, работает хорошо
Что ж ... Вы можете проверить, действительно ли вы обращаетесь к одним и тем же библиотекам при использовании сервера разработки (вы можете просто использовать оболочку django и pdb, пройти через метод User.check_password() и попутно проверять файлы модулей).






вы используете супервизор для запуска службы?