Ich entwickle ein Control Panel und habe einige Leute damit beauftragt, es für mich zu bauen. Sie rannten alle weg und ich musste die Nudeln putzen.
Was ich tun muss ist:
Nur ein einfacher Anmeldevorgang. Das Problem besteht darin, dass die Konsole bei erfolgreicher Anmeldung in diese Umleitungsschleife wie folgt übergeht:
[gin] 2023/02/21 - 15:43:32 | 301 | 1.224601041s | ::1 | post "/login" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:33 | 200 | 787.3905ms | ::1 | get "/dashboard" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:33 | 200 | 197.989875ms | ::1 | get "/login" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:34 | 200 | 817.293166ms | ::1 | get "/dashboard" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:34 | 200 | 206.107791ms | ::1 | get "/login" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:35 | 200 | 792.954375ms | ::1 | get "/dashboard" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:35 | 200 | 201.972708ms | ::1 | get "/login" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:36 | 200 | 840.773625ms | ::1 | get "/dashboard" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:36 | 200 | 198.680125ms | ::1 | get "/login" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:37 | 200 | 897.679708ms | ::1 | get "/dashboard" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:37 | 200 | 200.759917ms | ::1 | get "/login" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:38 | 200 | 795.39975ms | ::1 | get "/dashboard" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:38 | 200 | 196.538ms | ::1 | get "/login" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:39 | 200 | 844.680709ms | ::1 | get "/dashboard" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:39 | 200 | 180.598084ms | ::1 | get "/login" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:40 | 200 | 814.666208ms | ::1 | get "/dashboard" [gin-debug] [warning] headers were already written. wanted to override status code 301 with 200 [gin] 2023/02/21 - 15:43:40 | 200 | 210.281ms | ::1 | get "/login"
Im Moment bin ich noch dabei, Golang und Gin zu lernen bzw. neu darin zu sein, da ich einen älteren Entwickler vertrete, also ist es für mich einfach nur das Nötigste...
Soweit ich weiß, main()
besteht darin, Routing und Middleware zu konfigurieren, Vorlagen zu laden und dann die Engine auszuführen.
main.go
func main() { //gin.setmode(gin.releasemode) // uncomment for production // startup tasks startup() logging.loginfo("ran startup tasks...") // configure engine hostport := fmt.sprintf( "%s:%d", datamanagers.loadconfig().bshost, datamanagers.loadconfig().bsport) webengine := gin.default() webengine.settrustedproxies([]string{hostport}) logging.loginfo("configured engine...") // load middleware store := cookie.newstore([]byte(randstr.string(64))) webengine.use(sessions.sessions("session", store)) webengine.use(errorhandler.errorshandler500()) logging.loginfo("loaded middleware...") // configure routes pubroutes := webengine.group("/") privroutes := webengine.group("/") routes.publicroutes(pubroutes) privroutes.use(middleware.authrequired) routes.privateroutes(privroutes) logging.loginfo("configured routes...") // non routables webengine.noroute(errorhandler.errorshandler404()) logging.loginfo("configured non-routables...") // load template files loadtemplates(webengine) logging.loginfo("loaded templates...") // start the gin engine err := webengine.run(hostport) logging.loginfo("...blocksuite-webui loaded") logging.catch(err) }
Beim Zugriff auf /
时,我会被重定向到 /login
wird das Anmeldeformular angezeigt.
Ich sende das Formular mit gültigen Anmeldeinformationen ab und es wird zu /dashboard
weitergeleitet. Ich weiß nicht, ob die Umleitung nach erfolgreicher Anmeldung korrekt ist. Das hat der ursprüngliche Entwickler so gemacht und es funktioniert einwandfrei.
routes.go
func publicroutes(webengine *gin.routergroup) { webengine.get("/login", entry.logingethandler) webengine.post("/login", entry.loginposthandler) webengine.get("/", other.indexgethandler()) } func privateroutes(webengine *gin.routergroup) { dashboardroutes := webengine.group("/dashboard") { dashboardroutes.get("/", dashboard.dashboardgethandler) } }
login.go
func logingethandler(context *gin.context) { user := utility.getusersession(context).get("useremail") if user != nil { context.redirect(http.statusmovedpermanently, "/dashboard") } context.html(http.statusok, "login.html", gin.h{ "sitekey": datamanagers.getrecaptchasettings().sitekey, "enabled": datamanagers.getrecaptchasettings().enabled, "content": "", "success": "", "serverlogo": brand.getbrandlogo(), "title": "welcome back", }) } func loginposthandler(context *gin.context) { user := utility.getusersession(context).get("useremail") if user != nil { context.redirect(http.statusmovedpermanently, "/dashboard") //return } useremail := utility.sanitize(context.postform("email")) password := utility.sanitize(context.postform("password")) rememberme := utility.sanitize(context.postform("rememberme")) //captcha := context.postform("g-recaptcha-response") if !utility.isemailvalid(useremail) { context.html(http.statusbadrequest, "login.html", gin.h{"content": "please enter a valid email address"}) return } /*if helpers2.recaptchacheck(captcha) || datamanagers.getconfig().sitekey != "" { // success } else { if datamanagers.getconfig().enabled { context.html(http.statusbadrequest, "login.html", gin.h{"content": "please verify captcha"}) return } }*/ if utility.emptyuserpass(useremail, password) { context.html(http.statusbadrequest, "login.html", gin.h{"content": "email and password cannot be empty"}) return } if utility.checkforwhitespaces(useremail, password) != nil { context.html(http.statusbadrequest, "login.html", gin.h{"content": "username and password can't contain spaces"}) return } if !utility.checkuserpass(useremail, password) { context.html(http.statusunauthorized, "login.html", gin.h{"content": "incorrect username or password"}) return } utility.newusersession(context, useremail) if rememberme == "yes" { utility.setsessionage(context) } context.redirect(http.statusmovedpermanently, "/dashboard") }
Dann sollte die Seite /dashboard
geladen werden.
dashboard.go
func dashboardgethandler(context *gin.context) { user := utility.getusersession(context).get("useremail") db := datamanagers.getdb() if user == nil { context.redirect(http.statusmovedpermanently, "/login") } [...] context.html(http.statusok, "dashboard.html", gin.h{ "info": info, "imageurl": utility.getimage(user), "serverlogo": brand.getbrandicon(), "title": "dashboard", "servername": datamanagers.getserverinfo().servername, }) }
(Im dashboard.go
-Code habe ich den Code weggelassen, der die Daten in das Dashboard zieht, weil er lang war und ich es nicht für notwendig hielt.)
http.statusok
und keine Würfel zu verwenden. func DashboardGetHandler() gin.HandlerFunc { return func(context *gin.Context) { [...] } }
Ich habe absolut keine Ahnung, wohin ich als nächstes gehen soll. Danke!
Vielen Dank an alle, die geholfen haben. Ich habe Kontakt mit dem vorherigen Entwickler aufgenommen und er hat mir geholfen, das Problem herauszufinden.
In seinem Code hat er eine Middleware-Funktion erstellt, die aus irgendeinem Grund die Sitzung erneut überprüft. Dieser Code sucht nach einer alten Variablen im Sitzungscookie, die nicht existiert. Also werde ich zum Anmeldebildschirm zurückgeworfen.
Also habe ich diese Middleware entfernt, da ich sie sowieso in login.go verwaltet habe.
Das obige ist der detaillierte Inhalt vonGolang Gin: Der Titel steht bereits geschrieben. Sie möchten den Statuscode 301 mit 200 überschreiben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!