ValueError: недопустимый хэш sha256_crypt при проверке хешированного пароля при входе в систему - PullRequest
0 голосов
/ 08 мая 2018

При попытке подтвердить пароль пользователя в моем приложении-колбе появляется ошибка 500.

Я использую два одинаковых приложения-фляги, одно в моей локальной системе Ubuntu, а другое на линод-сервере.

В локальной системе я запускаю его на встроенном сервере разработки, в удаленной системе я использую apache2 с mod-wsgi.

Пользовательские данные хранятся в базе данных postgresql в каждой системе независимо.

В локальной системе все работает, как и ожидалось, в удаленной системе появляется ошибка. Выдержка из error.log ниже:

[2018-05-08 08:51:20,516] ERROR in app: Exception on /login/ [POST]
Traceback (most recent call last):
File "/home/roger/www/FlaskApp/venv/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app response = self.full_dispatch_request()
File "/home/roger/www/FlaskApp/venv/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request rv = self.handle_user_exception(e)
File "/home/roger/www/FlaskApp/venv/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception reraise(exc_type, exc_value, tb)
File "/home/roger/www/FlaskApp/venv/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/home/roger/www/FlaskApp/venv/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/roger/www/FlaskApp/FlaskApp/server.py", line 79, in login_view if sha256_crypt.verify(request.form['password'], userdata[2]):
File "/home/roger/www/FlaskApp/venv/lib/python2.7/site-packages/passlib/utils/handlers.py", line 757, in verify
self = cls.from_string(hash, **context)
File "/home/roger/www/FlaskApp/venv/lib/python2.7/site-packages/passlib/handlers/sha2_crypt.py", line 307, in from_string raise uh.exc.InvalidHashError(cls)
ValueError: not a valid sha256_crypt hash

Это строка на моей странице входа в систему, которая выдает ошибку: (userdata [2] является столбцом пароля usertable моей базы данных)

if sha256_crypt.verify(request.form['password'], userdata[2]):

на странице registration.ph Я хэш-пароль, как это, прежде чем сохранить его в базе данных:

password = sha256_crypt.encrypt(str(request.form['password']))

Это мой конфиг флеш-приложения:

from flask import Flask, render_template, redirect, url_for, abort, request, session
from passlib.hash import sha256_crypt
from flask_session import Session
from functools import wraps

app = Flask(__name__)
SESSION_TYPE = 'filesystem'
app.secret_key = 'ihgipeghephg'

sess = Session()
sess.init_app(app)

Это мой .wsgi - файл:

#! /usr/bin/python
import sys
import logging

# use the following lines for activating and using the venv
activate_this = '/home/roger/www/FlaskApp/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/home/roger/www/FlaskApp/")

from FlaskApp import app as application
application.secret_key = 'whfipwfzqperznn'

Я не понимаю, почему он работает нормально в локальной системе, а не в удаленной системе.

Любые советы, где можно посмотреть.

1 Ответ

0 голосов
/ 08 мая 2018

ОК, я нашел проблему.

Я использовал разные базы данных для каждой системы. В одной системе у меня пароли хранятся в столбце 2, в другой - в столбце 3.

Просто пришлось изменить это:

if sha256_crypt.verify(request.form['password'], userdata[2]):

к этому:

if sha256_crypt.verify(request.form['password'], userdata[3]):
...