簡體   English   中英

進行多個響應.WriteHeader調用

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM