我正在嘗試改進我的 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}零件成為字符串變量,但我似乎無法使其正常工作。
1 回答

弒天下
TA貢獻1818條經驗 獲得超8個贊
像這樣的東西?
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)
}
- 1 回答
- 0 關注
- 235 瀏覽
添加回答
舉報
0/150
提交
取消