GO Gin 如果我的代码的任何部分 returns false,则继续返回空状态
GO Gin Keeps returning empty status if Any part of my code returns false
我对 Golang 和 Gin(框架)比较陌生
我正在编写一些非常简单的 API 端点。但是我注意到 Gin 真的很奇怪,如果我的代码中有任何代码或函数 returns false 我的代码或条件的其余部分不会被执行并且 Gin 只是 returns a JSON 状态为空:
{"状态":""}
这是一个非常简单的代码来解释我的意思
在 functions.go 文件中我有:
func VerifyUserLogin(username,password,userAgent string) (string, string) {
userData := Users{}
userQueryColumn := "username=?"
// if they are trying to login with email
if nEmailHelpers.EmailIsValid(username) == true{
userQueryColumn = "email=?"
}
if getUserData := db.Select("password").Where(userQueryColumn, strings.ToLower(username)).First(&userData); getUserData.Error != nil {
// Meaning there was an error, most likely no data found , so we just return false todo improve this error handling later to handle more specific errors
return "", feedback["InvalidLogin"]
} else {
if getUserData.RowsAffected == 1 {
if nSecurityHelpers.CheckPasswordHash(password, userData.Password)==true {
token, tokenError := CreateToken(username, userAgent, false, 60)
if tokenError == nil {
return token, feedback["ValidLogin"]
} else {
return "", feedback["TokenNotGenerated"]
}
} else {
return "", feedback["InvalidLogin"]
}
}
return "", feedback["InvalidLogin"]
}
}
在另一个引用 functions.go 文件的 go 文件中,我有:
func main(){
router := gin.Default()
router.POST ("login",loginUser)
router.Run()
}
var feedback = userFeedback.Users()
// loginUser function to login a user
func loginUser(c *gin.Context){
requestBody := neielRequestsHelpers.RequestBody(c)
username := requestBody["username"]
password := requestBody["password"]
userAgent := c.Request.Header.Get("User-Agent")
token, loginMessage := userFunctions.VerifyUserLogin(username,password,userAgent)
// todo come back and fix proper error message when user does not exist
fmt.Println(loginMessage)
if loginMessage==feedback["ValidLogin"]{
c.JSON(http.StatusOK, gin.H{"status":loginMessage,"token":token})
}else{
c.JSON(http.StatusUnauthorized, gin.H{"status":feedback["InvalidLogin"]})
}
}
如果我的所有输入都是正确的,那么一切顺利(用户名存在且密码正确)。但是我必须处理用户名或密码无效的情况。如果出于任何原因 getUserData 或 nSecurityHelpers.CheckPasswordHash() 是 false ,或者与此相关的任何函数 returns 布尔值 false 。整个函数只是终止并且不允许我按照我想要的方式处理错误并输出自定义 JSON 响应。我刚得到这个 {"status":""}
我 100% 确定这个问题是由 Gin 引起的,但我不知道要激活或停用什么才能让我自己处理错误。我已经阅读了文档,但很明显我遗漏了一些东西。
请帮帮我。
我已经解决了这个问题,感谢所有试图提供帮助的人
这是一个拼写错误,导致另一个文件中的问题是“InValidLogin”而不是“InvalidLogin”。
真的很微妙
我对 Golang 和 Gin(框架)比较陌生
我正在编写一些非常简单的 API 端点。但是我注意到 Gin 真的很奇怪,如果我的代码中有任何代码或函数 returns false 我的代码或条件的其余部分不会被执行并且 Gin 只是 returns a JSON 状态为空:
{"状态":""}
这是一个非常简单的代码来解释我的意思
在 functions.go 文件中我有:
func VerifyUserLogin(username,password,userAgent string) (string, string) {
userData := Users{}
userQueryColumn := "username=?"
// if they are trying to login with email
if nEmailHelpers.EmailIsValid(username) == true{
userQueryColumn = "email=?"
}
if getUserData := db.Select("password").Where(userQueryColumn, strings.ToLower(username)).First(&userData); getUserData.Error != nil {
// Meaning there was an error, most likely no data found , so we just return false todo improve this error handling later to handle more specific errors
return "", feedback["InvalidLogin"]
} else {
if getUserData.RowsAffected == 1 {
if nSecurityHelpers.CheckPasswordHash(password, userData.Password)==true {
token, tokenError := CreateToken(username, userAgent, false, 60)
if tokenError == nil {
return token, feedback["ValidLogin"]
} else {
return "", feedback["TokenNotGenerated"]
}
} else {
return "", feedback["InvalidLogin"]
}
}
return "", feedback["InvalidLogin"]
}
}
在另一个引用 functions.go 文件的 go 文件中,我有:
func main(){
router := gin.Default()
router.POST ("login",loginUser)
router.Run()
}
var feedback = userFeedback.Users()
// loginUser function to login a user
func loginUser(c *gin.Context){
requestBody := neielRequestsHelpers.RequestBody(c)
username := requestBody["username"]
password := requestBody["password"]
userAgent := c.Request.Header.Get("User-Agent")
token, loginMessage := userFunctions.VerifyUserLogin(username,password,userAgent)
// todo come back and fix proper error message when user does not exist
fmt.Println(loginMessage)
if loginMessage==feedback["ValidLogin"]{
c.JSON(http.StatusOK, gin.H{"status":loginMessage,"token":token})
}else{
c.JSON(http.StatusUnauthorized, gin.H{"status":feedback["InvalidLogin"]})
}
}
如果我的所有输入都是正确的,那么一切顺利(用户名存在且密码正确)。但是我必须处理用户名或密码无效的情况。如果出于任何原因 getUserData 或 nSecurityHelpers.CheckPasswordHash() 是 false ,或者与此相关的任何函数 returns 布尔值 false 。整个函数只是终止并且不允许我按照我想要的方式处理错误并输出自定义 JSON 响应。我刚得到这个 {"status":""}
我 100% 确定这个问题是由 Gin 引起的,但我不知道要激活或停用什么才能让我自己处理错误。我已经阅读了文档,但很明显我遗漏了一些东西。
请帮帮我。
我已经解决了这个问题,感谢所有试图提供帮助的人 这是一个拼写错误,导致另一个文件中的问题是“InValidLogin”而不是“InvalidLogin”。 真的很微妙