在flask-bcrypt扩展上,加密的字符串存储为bytes对象 这个(使用python 3.5):
>>> user.password
b'$2b$12$3UutBDuGIrxp2z95alVTp.0HO3qQEtk7O/emR0UC27aNaJKC/WCU.'
但是,当这个字符串存储在postgresql上时,它会被转换并变得像 这样:
>>> user.password
'\\x243262243132244a546d7673453238354c754a497a4a334f37644a307559672f52796a486a526c4f443431536f387748544132303077447176555675'
当然,它不会通过flask-bcrypt检查密码。我试着encode
了
将密码保存到数据库之前以及每当调用密码时我都要输入密码
解码回来。它有效。
我的问题是,我应该使用哪种数据类型?我必须使用BLOB
数据
在postgresql上输入?或者我上面所做的(encode
和decode
)正确的做法是什么?
使用sqlite3时我没有这个问题。
答案 0 :(得分:2)
您需要将字节转换为字符串(因为所有字节都是ascii字符)然后您可以将其存储在文本(或其他字符类型)列中
答案 1 :(得分:1)
我有类似的问题,我在Postgresql上使用BYTEA数据类型解决了它。我认为在Postgre中将字节数组写入VARCHAR数据类型时会出现问题。这可能与数据库编码以及从byte到varchar的转换细节有关。