ValueError: not a valid sha256_crypt hash when verifying hashed password during login
ValueError: not a valid sha256_crypt hash when verifying hashed password during login
我在尝试验证用户密码时在我的 flask-app 中收到服务器 500 错误。
我正在 运行安装两个相同的 flask-apps,一个在我的本地 ubuntu 系统上,一个在 linode 服务器上。
在本地系统上,我 运行 它在内置开发服务器上,在远程系统上,我使用带有 mod-wsgi 的 apache2。
用户数据独立存储在每个系统上的 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的password列)
if sha256_crypt.verify(request.form['password'], userdata[2]):
在 registration.page 上,我像这样散列密码,然后将其存储到数据库中:
password = sha256_crypt.encrypt(str(request.form['password']))
这是我的 flask-app 配置:
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'
我不明白为什么它在本地系统上运行良好,而在远程系统上运行不正常。
如有任何提示,我们将不胜感激。
好的,我找到问题了。
我为每个系统使用了不同的数据库。
在一个系统上,我将密码存储在第 2 列中,在另一个系统中的第 3 列中。
只需要改变这个:
if sha256_crypt.verify(request.form['password'], userdata[2]):
对此:
if sha256_crypt.verify(request.form['password'], userdata[3]):
我在尝试验证用户密码时在我的 flask-app 中收到服务器 500 错误。
我正在 运行安装两个相同的 flask-apps,一个在我的本地 ubuntu 系统上,一个在 linode 服务器上。
在本地系统上,我 运行 它在内置开发服务器上,在远程系统上,我使用带有 mod-wsgi 的 apache2。
用户数据独立存储在每个系统上的 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的password列)
if sha256_crypt.verify(request.form['password'], userdata[2]):
在 registration.page 上,我像这样散列密码,然后将其存储到数据库中:
password = sha256_crypt.encrypt(str(request.form['password']))
这是我的 flask-app 配置:
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'
我不明白为什么它在本地系统上运行良好,而在远程系统上运行不正常。
如有任何提示,我们将不胜感激。
好的,我找到问题了。
我为每个系统使用了不同的数据库。 在一个系统上,我将密码存储在第 2 列中,在另一个系统中的第 3 列中。
只需要改变这个:
if sha256_crypt.verify(request.form['password'], userdata[2]):
对此:
if sha256_crypt.verify(request.form['password'], userdata[3]):