[英]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.