登录前检查登录值

hdr*_*ven 2 html postgresql go

我有一个登录表单,当我点击发送时,我将页面重定向到一个/create.在那里我检查一个GO函数,如果我的登录值是正确的,以访问下一页,但我的功能有问题.

loginCheck:

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

        //Call the DB function
        db:= SetupDB()

        name, password := r.FormValue("user"), r.FormValue("password")
        hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
        PanicIf(err)

        rows, err := db.Query("SELECT name, password from users where name = $1 and password = $2" ,name, hashedPassword)
        PanicIf(err)

        defer rows.Close()

        for rows.Next() {

            err := rows.Scan(&name, &hashedPassword)
            PanicIf(err)

               fmt.Println(name, hashedPassword)
        }


        db.Close()
}
Run Code Online (Sandbox Code Playgroud)

我试图打印rows.Next()内的值,以查看是否从数据库中读取值,但它是空的.

Von*_*onC 5

要添加到seong评论,您可以在goserver中考虑这个示例:

func CheckPassword(username, password string) bool {
    if len(username) == 0 || len(password) == 0 {
        return false
    }

    var hashPw []byte
    err := DB.QueryRow("SELECT password FROM users WHERE username=?", username).Scan(&hashPw)
    if err != nil {
        log.Println("CheckPassword", err.Error())
        return false
    }

    if len(hashPw) == 0 {
        return false
    }

    err = bcrypt.CompareHashAndPassword(hashPw, []byte(password))
    if err == nil {
        return true
    }
    return false
}
Run Code Online (Sandbox Code Playgroud)

查询仅使用username.