[英]Go multiple response.WriteHeader calls
因此,我正在编写一个基本的Web应用程序,并且在成功登录后无法重定向用户。 代码是:
t, err := template.ParseFiles("home.html")
if err != nil {
log.Fatal("template.ParseFiles: ", err)
}
err = t.Execute(w, nil)
if err != nil {
log.Fatal("t.Execute: ", err)
}
if r.Method == "POST" {
r.ParseForm()
user := r.FormValue("username")
pass := r.FormValue("password")
if checkLogin(user, pass) {
loggedIn = true
http.Redirect(w, r, "/home", 302)
}
}
错误消息是:“ http:多个response.WriteHeader调用”。
我的问题是,在不调用设置标头的t.Execute的情况下,我看不到提供包含登录表单的html文件的方法。
如何显示登录页面并且仍然能够重定向到其他页面?
您正在编写(使用w
),然后稍后尝试使用302
标头重定向进行重定向(也使用w
)。
您只能发送一次标头,并且如果您开始写入w,它将假定标头为200
(确定)
另外,最好在写入ResponseWriter( w
)前检查http.Method
而且,记住要return
重定向或移交ResponseWriter并请求对另一功能之后!
希望这可以帮助。
如何显示登录页面并且仍然能够重定向到其他页面?
具有不同的身份验证路径。 使登录表单提交到身份验证路由。 也有一个单独的身份验证处理程序。
例如,您的登录表单:
<form method="post" action="/auth">
您的Go主程序:
http.HandleFunc("/", homeHandler)
http.HandleFunc("/auth", authHandler)
身份验证处理完成后,您可以将用户重定向到适当的页面。 您可以在查询字符串中传递一个参数,该参数包含重定向的目标路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.