我正在使用 Sequelize 6.21.3 访问 MariaDB 10.8 数据库。在该数据库中,我有一个用户表,其中包含一个密码列,该密码列使用 SQL 函数 ENCODE 进行编码。
现在我想通过sequelize 更新用户的密码。我执行以下操作:
user.update({
password: sequelize.fn(
"encode",
password,
"ENCODE_PASSWORD"
)
});
但是,如果密码包含 $ 符号(如
"123$foo"
),则更新查询会导致错误:
Named bind parameter "$foo" has no value in the given object.
我知道sequelize尝试填充
$foo
参数的值,但是$foo
不应该是一个参数,它只是一个文字字符串。
如何避免这种行为?
请勿存储用户的密码!
在将密码存储到数据库之前,您需要使用盐对密码进行哈希处理。这样,当您的数据库受到损害时(历史记录显示,无论您是谁,都会发生这种情况),那些窃取数据的人就无法使用该数据尝试登录用户可能重复使用其密码的其他网站.
请参阅 bcrypt 了解更多信息。