Maison > Article > développement back-end > Golang Gin : Le titre est déjà écrit. Vous souhaitez remplacer le code d'état 301 par 200
Je développe un panneau de contrôle et j'ai embauché des personnes pour le construire pour moi. Ils se sont tous enfuis et je me suis retrouvé à nettoyer les pâtes.
Ce que je dois faire c'est :
Juste un simple processus de connexion. Le problème est que lorsque la connexion réussit, la console entre dans cette boucle de redirection comme ceci :
[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"
En ce moment, j'apprends encore/nouveau à golang et gin puisque je remplace un développeur plus âgé, donc pour moi c'est juste vide...
D'après ce que j'ai compris, main()
configure le routage, le middleware, charge les modèles, puis fait tourner le moteur.
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) }
Lors de l'accès à /
时,我会被重定向到 /login
, le formulaire de connexion apparaîtra.
Je soumets le formulaire avec des informations d'identification valides et il me redirige vers /dashboard
. Je ne sais pas si la redirection après une connexion réussie est correcte, c'est ce que le développeur d'origine a fait et cela fonctionne bien.
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") }
Ensuite, la page /dashboard
devrait se charger.
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, }) }
(Dans le code dashboard.go
, j'ai omis le code qui extrait les données dans le tableau de bord car il était long et je ne pensais pas que c'était nécessaire.)
http.statusok
et pas de dés. func DashboardGetHandler() gin.HandlerFunc { return func(context *gin.Context) { [...] } }
Je ne sais absolument pas où aller ensuite. Merci!
Merci à tous ceux qui ont aidé. J'ai contacté le développeur précédent et il m'a aidé à résoudre le problème.
Dans son code, il a créé une fonction middleware qui, pour une raison quelconque, vérifie à nouveau la session. Ce code recherche une ancienne variable dans le cookie de session qui n'existe pas. Je suis donc renvoyé à l'écran de connexion.
Donc, ce que j'ai fait, c'est supprimer ce middleware puisque je le gérais de toute façon dans login.go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!