2 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個贊
使用調(diào)用w.Write
或?qū)懭胨?code>Fmt.Fprintf需要之前設(shè)置HTTP 狀態(tài)代碼,否則它設(shè)置默認(rèn)值StatusOK
// 如果未顯式調(diào)用 WriteHeader,則第一次調(diào)用 Write
// 將觸發(fā)隱式 WriteHeader(http.StatusOK)。
多次設(shè)置狀態(tài)碼會拋出多余的日志。
因此,您的代碼將 HTTP 狀態(tài)代碼設(shè)置為200 (http.StatusOk)
,因此之后的重定向根本不可能。
解決方案:
func login(w http.ResponseWriter, r *http.Request) {
s := samlsp.SessionFromContext(r.Context())
if s == nil {
return
}
sa, ok := s.(samlsp.SessionWithAttributes)
if !ok {
return
}
// this line is removed
// fmt.Fprintf(w, "Token contents, %+v!", sa.GetAttributes())
w.Header().Add("Location", "http://localhost:8080/")
w.WriteHeader(http.StatusFound)
// Or Simply
// http.Redirect(w, r, "http://localhost:8080/", http.StatusFound)
}

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個贊
嘗試在編寫內(nèi)容之前發(fā)送標(biāo)題。并可選擇使用相對位置
w.Header().Add("Location", "/")
w.WriteHeader(http.StatusFound)
fmt.Fprintf(w, "Token contents, %+v!", sa.GetAttributes())
- 2 回答
- 0 關(guān)注
- 188 瀏覽
添加回答
舉報