所以我在mongodb中存储密码哈希,如下面的例子一样。如果我添加它然后在相同的函数中检索它说密码和哈希匹配,但是如果我尝试在另一个函数中检索它,两个值仍然是相同的,除了哈希密码与提供的密码不匹配。示例如下。
c := session.DB("users").C("accounts")
err = c.Find(bson.M{"username": user.Username}).One(&userInfo)
if err != nil {
return err
}
log.Println(user.Password+Pepper)
log.Println(userInfo)
err = bcrypt.CompareHashAndPassword(userInfo.PWHash, []byte(user.Password+Pepper))
if err != nil {
return err
}
return nil
密码上方的示例与哈希值不匹配。
orig := user.Password
user.PWHash, err = bcrypt.GenerateFromPassword([]byte(user.Password+Pepper), bcrypt.DefaultCost)
session, err := mgo.Dial("mongodb")
if err != nil {
return err
}
defer session.Close()
if InTesting {
err = session.DB("users").DropDatabase()
if err != nil {
return err
}
}
c := session.DB("users").C("accounts")
err = c.Insert(user)
if err != nil {
return err
}
var userInfo models.UserAuth
err = c.Find(bson.M{"username": user.Username}).One(&userInfo)
if err != nil {
return err
}
log.Println(orig + Pepper)
log.Println(userInfo)
err = bcrypt.CompareHashAndPassword(userInfo.PWHash, []byte(orig+Pepper))
if err != nil {
log.Println(err)
} else {
log.Println("matched!")
}
在上面的示例中,密码确实匹配。两个示例都是2个日志的注释包含相同的信息。我完全没有想法。非常感谢任何帮助:)