gpt4 book ai didi

gorilla 网络工具包 : len(session. Flashes()) 为 0

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

我有一个注册表单,我想用简单的逻辑放在一起,我在服务器端用简单的 ifs 检查表单验证,例如

if username == "" || < 5 {
session.AddFlash("Username is too short")
session.Save(r, w)
}

那在我做的验证结束时工作正常(出于调试目的)

fmt.Println(len(session.Flashes())) which returns 3

然后我检查是否有像这样的表单错误

if len(session.Flashes()) != 0 {
// Perform Redirect and show flashes
} else {
// Set proper session variables and log user in
}

那么 if 3 > 0 为什么触发 else 语句而不是 if 语句的第一部分?我只是不确定为什么会这样。谢谢,如果您需要更多信息,请告诉我,实际代码片段:

if username == "" || len(username) < 4 {
session.AddFlash("Username is too short")
session.Save(r, w)
}
if email == "" || len(email) < 5 {
session.AddFlash("Email is too short")
session.Save(r, w)
}
if firstname == "" || len(firstname) < 3 {
session.AddFlash("Firstname is too short")
session.Save(r, w)
}
if lastname == "" || len(lastname) < 3 {
session.AddFlash("Lastname is too short")
session.Save(r, w)
}

fmt.Println(len(session.Flashes()) > 0) // true

if len(session.Flashes()) != 0 {
fmt.Println("Why am I here also")
type Page struct {
Title string
Username interface{}
Errors []interface{}
}

session, _ := common.GetSession(r)
data := &Page{"Register", session.Values["username"], session.Flashes()}
session.Save(r, w)

tmpl, err := template.ParseFiles("views/register/register.html")
if err != nil {
http.Error(w, "Failed to load page.", 500)
}
tmpl.ExecuteTemplate(w, "register", data)
} else {
fmt.Println("Why am I here")
_, err := db.Query("// Perform DB Query")
if err != nil {
http.Error(w, "Sorry we had trouble saving your account to the database, try again in a bit.", 500)
}

session.Values["username"] = r.FormValue("username")
session.Values["authenticated"] = true

session.Save(r, w)

http.Redirect(w, r, "/", 303)
}

最佳答案

它没有很好的记录,但显然 Flashes 从 session 中删除 flashes 并返回它们:

func (s *Session) Flashes(vars ...string) []interface{} {
var flashes []interface{}
key := flashesKey
if len(vars) > 0 {
key = vars[0]
}
if v, ok := s.Values[key]; ok {
// Drop the flashes and return it.
delete(s.Values, key)
flashes = v.([]interface{})
}
return flashes
}

源代码here .

这里的解决方案是使用一个单独的变量来保存验证状态:

valid := true
if username == "" || len(username) < 4 {
valid = false
session.AddFlash("Username is too short")
session.Save(r, w)
}
// ...
if !valid {
// ...
} else {
// ...
}

编辑另一种获取闪光而不删除它们的方法是直接从 Values 获取它们:

flashes := session.Values["_flash"].([]interface{})

关于 gorilla 网络工具包 : len(session. Flashes()) 为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32219364/

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