2016-12-24 57 views
0

因此,我目前正在为我的Go web应用程序编写登录和注册功能,并试图实现一项功能,如果您未填写所需的表单字段“用户名“”密码“它会给你一个http.Error,然后我试图使它http.Redirect但我发现重定向时发生此错误。 http: multiple response.WriteHeader calls这是我的代码..Golang http:multiple response.WriteHeader calls

//Check form submission 
var u user 
if req.Method == http.MethodPost { 
    un := req.FormValue("username") 
    p := req.FormValue("password") 


    //Checking to see if user filled out required fields. 
    if un == ""{ 
     http.Error(w, "Please fill out required fields, you will be redirected shortly.", http.StatusForbidden) 
     time.Sleep(3000 * time.Millisecond) 
     //http.Redirect(w, req, "/" http.StatusSeeOther) 
     return 

    }else if p == "" { 
     http.Error(w, "Please fill out required fields, you will be redirected shortly.", http.StatusForbidden) 
     time.Sleep(3000 * time.Millisecond) 
     //http.Redirect(w, req, "/", http.StatusSeeOther) 
     return 
    } 

    c.Value = un 
    u = user{un, p} 

    dbUsers[c.Value] = u 
    http.Redirect(w, req, "/login", http.StatusSeeOther) 

    log.Println(dbUsers) 
    return 
} 

我知道,那是因为if/else语句中的多个HTTP调用但我不能完全拿出一个替代。任何帮助将不胜感激!

+1

显示所有的请求处理程序。另一个头写入来自我们看不到的代码。 –

+0

你不能调用'http.Error'然后'http.Redirect',这可能是你的错误的根源。我不确定你是否故意为这篇文章发表评论。 – squiguy

回答

2

您无法向同一请求发送多个响应(首先验证错误(403但400会更好),然后是重定向(301,...))。

您可以使用元标记或JavaScript的延迟之后,在客户端重定向或直接使用HTTP重定向,像

<meta http-equiv="refresh" content="3; URL=https://your.site/"> 
+0

非常感谢!我最终添加了另一个gohtml模板并添加了这段代码,以便当用户错误地填写表单时,它们被重定向到“forbidden.gohtml”页面。给出错误消息并重新导回。非常感谢你! – gone