为了账号安全,请及时绑定邮箱和手机立即绑定

如何验证密码

如何验证密码

Go
郎朗坤 2022-09-19 10:02:09
在此代码中,第一个函数是将查找数据库中的电子邮件地址和以哈希形式存在的密码。因此,比较哈希和密码。Findaccount()CompareHashAndPassword()现在在文件中,我有一个名为的函数,它将允许用户登录。我在这里有一个问题。我调用了函数,但它只是验证一个电子邮件地址,没有验证正确的密码,并给我消息。handler.gologinData()database.Findaccount(email, password, hash)false但是,如果我像这样调用该函数,它会验证电子邮件和密码。database.Findaccount(email, "1234", hash)如何解决这个问题,因为我将无法记住每个密码。数据库func Findaccount(myEmail, myPassword, hash string) bool {    collection := Connect.Database("WebApp2").Collection("dataStored")    if err := collection.FindOne(context.TODO(), bson.M{"email": myEmail}).Decode(&Account); err != nil {        fmt.Println("Enter the correct email or password")    }    err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(myPassword))    return err == nil}处理程序.gofunc HashPassword(password string) (string, error) {    bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)    return string(bytes), err}func loginData(w http.ResponseWriter, r *http.Request) {    email := r.FormValue("email")    password := r.FormValue("password")    hash, _ := HashPassword(password)    match := database.Findaccount(email, password, hash) // here is a problem    if match == false {        fmt.Println("false")    } else {        fmt.Println("true")    }}
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

根据文档,这是 的 func 模式:bycrypt.CompareHashAndPassword()


func CompareHashAndPassword(hashedPassword, password []byte) error

要使用它,您需要将(存储在数据库中的哈希密码)作为第一个参数值。hashedPassword


然后将 from 请求参数放入第二个参数。password


func loginData(w http.ResponseWriter, r *http.Request) {

    email := r.FormValue("email")

    password := r.FormValue("password")

    match := database.Findaccount(email, password)

    if match == false {

        fmt.Println("false")

    } else {

        fmt.Println("true")

    }

}


func Findaccount(myEmail, myPassword string) bool {

    collection := Connect.Database("WebApp2").Collection("dataStored")

    if err := collection.FindOne(context.TODO(), bson.M{"email": myEmail}).Decode(&Account); err != nil {

        fmt.Println("Enter the correct email or password")

    }

    err := bcrypt.CompareHashAndPassword([]byte(Account.Password), []byte(myPassword))

    return err == nil

}

参见 ,语句的第一个参数被填充,它是存储在 db 上的哈希密码。Findaccount()bcrypt.CompareHashAndPassword()Account.Password


查看完整回答
反对 回复 2022-09-19
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信