我正在使用带有python 3.5和postgresql的cookie cutter烧瓶应用程序。 Postgresql在docker镜像上运行,没有配置修改。
psql告诉我数据库是utf-8。在使用SQLALCHEMY_NATIVE_UNICODE = True
sqlalchemy专栏是:
password = Column(db.String(256 ), nullable=True)
和postgresql编码是UTF-8
我在密码验证中收到了Value Error无效的salt。似乎读取数据库值,然后在发送到bcrypt进行哈希验证之前将其转换为编码为UTF-8的字节。似乎bcrypt函数使用字节。也许bcrypt在获取字符串时会自行执行此操作,并且可能默认为utf-8(代码并未明确提供编码)。
Be.low是存储哈希的标准代码。它接受bcrypt.generate_password_hash(密码)返回的值,但是,它在编码后会被破坏。
def set_password(self, password):
"""Set password."""
self.password = bcrypt.generate_password_hash(password)
并修复了它:
def set_password(self, password):
"""Set password."""
self.password = bcrypt.generate_password_hash(password).decode('utf-8')
我真的不明白这是怎么允许的。为了使这个工作我解码它,然后它由“东西”处理,期望utf-8。当我不给它utf-8时,它应该是一个例外,不应该吗?