gpt4 book ai didi

go - 使用用户名或电子邮件地址登录

转载 作者:数据小太阳 更新时间:2023-10-29 03:06:54 26 4
gpt4 key购买 nike

我正在尝试改进我的 Go 应用程序中处理登录的代码块。它接收一个 login 值和一个 password 值,然后检查 username 字段或 email 字段数据库以查看是否可以找到用户。如果 login 包含 @ 符号,则将使用电子邮件。

所以我目前有:

if strings.Contains(login, "@") {
err := collection("users").Find(bson.M{"email" : login}).One(&user)
if err != nil { //no user found
api.WriteError(w, 400, "USER_NOT_FOUND", "No user found with email address: " + login)
return
}
} else {
err := collection("users").Find(bson.M{"username" : login}).One(&user)
if err != nil { //no user found
api.WriteError(w, 400, "USER_NOT_FOUND", "No user found with username: " + login)
return
}
}
//go on and check password

但您可以看到这不是很有效,因为我必须处理同一个错误两次。我也试过:

if strings.Contains(login.Identifier, "@") {
err := collection("users").Find(bson.M{}).One(&user)
} else {
err := collection("users").Find(bson.M{"username" : login}).One(&user)
}

if err != nil { //no user found
api.WriteError(w, 400, "USER_NOT_FOUND", "No user found with email address: " + login)
return
}
//go on and check password

但是 err 并不总是存在。

我想过以某种方式使 {"username": login} 部分成为一个字符串变量,但我似乎无法让它工作。

最佳答案

是这样的吗?

field := "username"
if strings.Contains(login.Identifier, "@") {
field = "email"
}
err := collection("users").Find(bson.M{field: login}).One(&user)
if err != nil {
api.WriteError(w, 400, "USER_NOT_FOUND", "No user found with " + field + ": " + login)
}

关于go - 使用用户名或电子邮件地址登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31540132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com