0

So I am currently writing a login and respectively a signup features for my Go web App and I am attempting to implement a feature that if you don't fill out both the required form fields "username" "password" it will give you an http.Error and then I am attempting to make it http.Redirect yet i get this error when redirecting occurs. http: multiple response.WriteHeader calls Here is my code..

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

I do know that it is because of the multiple http calls within the if/else statement yet I can't quite come up with an alternative. Any help would be greatly appreciated!

1
  • You cannot call http.Error and then http.Redirect which is likely the source of your error. I'm not sure if you commented it out for this post intentionally though. Commented Dec 25, 2016 at 1:39

1 Answer 1

2

You can not send multiple responses to the same request (first the validation error (403 but 400 would be better) and then the redirection (301, ...)).

You could use a meta tag or javascript to redirect on the client side after an delay or directly use the http redirect, like

<meta http-equiv="refresh" content="3; URL=https://your.site/">
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you very much! I ended up adding another gohtml template and adding this code so that when a user wrongfully fills out a form, they are redirected to the "forbidden.gohtml" page. Given the error message and redirected back. Thank you very much!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.