登录前检查登录值

时间:2014-07-15 11:22:53

标签: 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()
}

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

1 个答案:

答案 0 :(得分:5)

要添加到seong' comment,您可以考虑this example in 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
}

查询仅使用username完成。