package routes import ( "devops/entities" "errors" "net/http" "gorm.io/gorm" "zestack.dev/misc" "zestack.dev/slim" ) func handleLogin(c slim.Context) error { var req struct { Username string `json:"username" form:"username"` Password string `json:"password" form:"password"` } if err := c.Bind(&req); err != nil { return err } if req.Username == "" { return c.Redirect(http.StatusMovedPermanently, "/login?error=用户名不能为空") } if req.Password == "" { return c.Redirect(http.StatusMovedPermanently, "/login?error=登录密码不能为空") } var user entities.User err := db. Model(&entities.User{}). Where("username", req.Username). First(&user). Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return c.Redirect(http.StatusMovedPermanently, "/login?error=用户名或密码错误") } return err } if !misc.PasswordVerify(req.Password, user.Password) { return c.Redirect(http.StatusMovedPermanently, "/login?error=用户名或密码错误") } sess, err := store.Get(c.Request(), "session-key") if err != nil { return err } sess.Values["user"] = &user err = sess.Save(c.Request(), c.Response()) if err != nil { return err } return c.Redirect(http.StatusMovedPermanently, "/") }