2016-12-24 11 views
0

を呼び出していますので、私は現在、ログインとそれぞれのGoウェブアプリケーションのサインアップ機能を書いています。必要なフォームフィールドの両方を記入しないと、ユーザー名 ""パスワード "それはあなたにhttp.Errorを与えるでしょうし、それをhttp.Redirectにしようとしていますが、まだリダイレクトが発生するとこのエラーが発生します。 http: multiple response.WriteHeader callsは、ここで私はそれはまだ私はかなりの代替を考え出すことはできませんので、もし/ else文の中の複数のHTTP呼び出しであることを知っています。..Golang http:multiple response.WriteHeaderは

//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 
} 

私のコードです。どんな助けでも大歓迎です!

+1

ショーのように、要求ハンドラの全てを遅延した後、クライアント側でリダイレクトまたは直接HTTPリダイレクトを使用するようにメタタグやJavaScriptを使用することができます。他のヘッダー書き込みは、私たちが見ることができないコードから来ています。 –

+0

エラーの原因と思われる 'http.Error'と' http.Redirect'を呼び出すことはできません。あなたがこの投稿のために意図的にコメントしたかどうかはわかりません。 – squiguy

答えて

2

同じリクエストに対して複数の応答を送信することはできません(最初は検証エラー(403,400が良い)、リダイレクト(301、...))。

あなたが

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

ありがとうございました!私は別のgohtmlテンプレートを追加して、このコードを追加して、ユーザーがフォームを間違って入力したときに、 "forbidden.gohtml"ページにリダイレクトされるようにしました。エラーメッセージが与えられ、リダイレクトされます。どうもありがとうございました! – gone