,我正在制定一条对用户进行身份验证的路线,当我创建用户时,我将密码保存为哈希值,并在身份验证中创建了此函数来使用 crypto/bcrypt 库验证密码:,保存用户时一切正常,但当我进行身份验证时,密码验证返回此错误:,我创建一个哈希并转换为字符串来保存:,更多信息:
用户域
用户数据库
用户处理程序,根据文档,我认为我正确使用了
comparehashandpassword
,但出现此错误,// 比较哈希值$2a$10$gripzjzty3f0kgujs5egzevfvn1flwkkwl3isa30onhlo2vuhkyfa $2a$10$gripzjzty3f0kgujs5egzevfvn1flwkkwl3isa30onhlo2vuhkyfa,此处的日志意味着散列密码传递给
(*user).validatepassword
和 bcrypt.comparehashandpassword
比较两个散列密码。这是不正确的,bcrypt.comparehashandpassword
应该比较哈希密码和纯密码。,p.s. 这样做 password: string(hash)
是个坏主意。 语言规范允许这样做,但生成的字符串可能包含无效的 unicode 代码点,并且其他软件可能无法接受或正确处理它。例如,无效的代码点会被 postgresql 拒绝。以下演示将出现错误并显示消息:error:编码“utf8”的字节序列无效:0xff (sqlstate 22021)
。我认为你可以将password
的数据类型更改为[]byte
并将散列值作为二进制数据存储在数据库中。,