我收到了一个登录表单,当我点击发送时,我将页面重定向到/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()中打印值,看看是否从数据库中读取了值,但它是空的。
答案 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
完成。