使用结构,我将JSON表单中的数据保存到集合中,如下所示:
type SignUp struct {
Id int `json:"_id" bson:"_id"`
UserName string `json:"user_name" bson:"user_name"`
EmailId string `json:"email_id" bson:"email_id"`
Password string `json:"password" bson:"password"`
}
type SignUps []SignUp
使用函数
从mongodb集合中检索数据func Login(c *gin.Context) {
response := ResponseControllerList{}
conditions := bson.M{}
data, err := GetAllUser(conditions)
fmt.Println(data)
fmt.Println(err)
Matching(data)
return
}
func GetAllUser(blogQuery interface{}) (result SignUps, err error) {
mongoSession := config.ConnectDb()
sessionCopy := mongoSession.Copy()
defer sessionCopy.Close()
getCollection := mongoSession.DB("sign").C("signup")
err = getCollection.Find(blogQuery).Select(bson.M{}).All(&result)
if err != nil {
return result, err
}
return result, nil
}
但是没有按键检索的数据如下所示: -
[{1 puneet puneet@gmail.com puneet} {2 Rohit abc@gmail.com puneet}]
问题是我要收集所有现有的EmailId
和Password
并将它们与用户输入的userid
和password
进行匹配,如下所示: -
func Matching(data Signups){
userid="abc@gmail.com"
password="puneet"
//match?
}
如何将userid
和password
与EmailId
和Password
字段相匹配?
答案 0 :(得分:0)
您可以提供if
条件,以检查您的Matching
功能上的用户ID或电子邮件是否为空:
....
if data.userid != "" {
data.username = data.userid
}
data.password
....
您可以为查询创建新结构,并使用它来创建Matching
函数。
答案 1 :(得分:0)
for _, signup := range data {
if userId == signup.Id && password == signup.Password {
println("Match!")
}
}
答案 2 :(得分:0)
这不是直接回答你的问题,但是非常重要。您似乎在数据库中以纯文本格式保存用户的密码。这非常粗心,您应该添加一些加密,如bcrypt:https://godoc.org/golang.org/x/crypto/bcrypt
当您添加了一些加密后,您的匹配将与所有给定的答案完全不同。这取决于使用的加密包。但请忽略其他答案。它们可能有效,但仅适用于纯文本密码。