package front import ( "github.com/dchest/captcha" "github.com/gorilla/sessions" mgo "mongodb" qu "qfw/util" . "util" ) var store = sessions.NewCookieStore([]byte("jianyu_secret20210422")) func (f *Front) Login() { defer qu.Catch() if f.Method() == "POST" { username := f.GetString("username") password := f.GetString("pwd") imgCode := f.GetString("imgCode") passwordEn := qu.SE.EncodeString(password) qu.Debug(username, passwordEn, imgCode) session, err := store.Get(f.Request, "dataTagLoginImgCode") if err != nil { qu.Debug("图片验证码session获取失败-%s \n", username) f.ServeJson(map[string]interface{}{ "code": 0, "status": false, "message": "获取失败", }) return } code := qu.ObjToString(session.Values["dataTagLoginImgCode"]) if code == "" { qu.Debug("图片验证码过期-%s \n", username) f.ServeJson(map[string]interface{}{ "checked": false, "message": "图片验证码过期", }) return } //if !captcha.VerifyString(code, imgCode) { // qu.Debug("图片验证码错误-%s \n", username) // f.ServeJson(map[string]interface{}{ // "checked": false, // "message": "图片验证码错误", // }) // return //} query := map[string]interface{}{ "s_login": username, "s_password": passwordEn, } user, _ := Mgo.FindOne("s_user", query) checked := false if user != nil && len(*user) > 0 { checked = true f.SetSession("user", map[string]interface{}{ //"s_groupid": (*user)["s_groupid"], "s_name": (*user)["s_name"], "i_role": (*user)["i_role"], "s_pwd": password, "s_login": username, "id": mgo.BsonIdToSId((*user)["_id"]), }) UserMenu[username] = GetUserMenu(qu.IntAll((*user)["i_role"])) } f.ServeJson(map[string]interface{}{ "checked": checked, "message": "账号或密码错误", }) } else { _ = f.Render("login.html") } } // 获取图片验证码 func (f *Front) Code() { id := captcha.NewLen(4) //r := &http.Request{} f.Request.Header.Add("Cache-Control", "no-cache, no-store, must-revalidate") f.Request.Header.Add("Pragma", "no-cache") f.Request.Header.Add("Expires", "0") f.Request.Header.Add("Content-Type", "image/png") w := f.ResponseWriter session, err := store.Get(f.Request, "dataTagLoginImgCode") if err != nil { qu.Debug("session1获取失败") return } session.Values["dataTagLoginImgCode"] = id session.Options.MaxAge = 60 if err := session.Save(f.Request, w); err != nil { qu.Debug("session1保存错误,验证码 ", id) } err2 := captcha.WriteImage(w, id, 90, 30) if err2 != nil { qu.Debug("生成图片验证码错误,验证码 ", id) } return } func (f *Front) Logout() { f.DelSession("user") f.Redirect("/") }