user.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package front
  2. import (
  3. "github.com/dchest/captcha"
  4. "github.com/gorilla/sessions"
  5. mgo "mongodb"
  6. qu "qfw/util"
  7. . "util"
  8. )
  9. var store = sessions.NewCookieStore([]byte("jianyu_secret20210422"))
  10. func (f *Front) Login() {
  11. defer qu.Catch()
  12. if f.Method() == "POST" {
  13. username := f.GetString("username")
  14. password := f.GetString("pwd")
  15. imgCode := f.GetString("imgCode")
  16. passwordEn := qu.SE.EncodeString(password)
  17. qu.Debug(username, passwordEn, imgCode)
  18. session, err := store.Get(f.Request, "dataTagLoginImgCode")
  19. if err != nil {
  20. qu.Debug("图片验证码session获取失败-%s \n", username)
  21. f.ServeJson(map[string]interface{}{
  22. "code": 0,
  23. "status": false,
  24. "message": "获取失败",
  25. })
  26. return
  27. }
  28. code := qu.ObjToString(session.Values["dataTagLoginImgCode"])
  29. if code == "" {
  30. qu.Debug("图片验证码过期-%s \n", username)
  31. f.ServeJson(map[string]interface{}{
  32. "checked": false,
  33. "message": "图片验证码过期",
  34. })
  35. return
  36. }
  37. //if !captcha.VerifyString(code, imgCode) {
  38. // qu.Debug("图片验证码错误-%s \n", username)
  39. // f.ServeJson(map[string]interface{}{
  40. // "checked": false,
  41. // "message": "图片验证码错误",
  42. // })
  43. // return
  44. //}
  45. query := map[string]interface{}{
  46. "s_login": username,
  47. "s_password": passwordEn,
  48. }
  49. user, _ := Mgo.FindOne("s_user", query)
  50. checked := false
  51. if user != nil && len(*user) > 0 {
  52. checked = true
  53. f.SetSession("user", map[string]interface{}{
  54. //"s_groupid": (*user)["s_groupid"],
  55. "s_name": (*user)["s_name"],
  56. "i_role": (*user)["i_role"],
  57. "s_pwd": password,
  58. "s_login": username,
  59. "id": mgo.BsonIdToSId((*user)["_id"]),
  60. })
  61. UserMenu[username] = GetUserMenu(qu.IntAll((*user)["i_role"]))
  62. }
  63. f.ServeJson(map[string]interface{}{
  64. "checked": checked,
  65. "message": "账号或密码错误",
  66. })
  67. } else {
  68. _ = f.Render("login.html")
  69. }
  70. }
  71. // 获取图片验证码
  72. func (f *Front) Code() {
  73. id := captcha.NewLen(4)
  74. //r := &http.Request{}
  75. f.Request.Header.Add("Cache-Control", "no-cache, no-store, must-revalidate")
  76. f.Request.Header.Add("Pragma", "no-cache")
  77. f.Request.Header.Add("Expires", "0")
  78. f.Request.Header.Add("Content-Type", "image/png")
  79. w := f.ResponseWriter
  80. session, err := store.Get(f.Request, "dataTagLoginImgCode")
  81. if err != nil {
  82. qu.Debug("session1获取失败")
  83. return
  84. }
  85. session.Values["dataTagLoginImgCode"] = id
  86. session.Options.MaxAge = 60
  87. if err := session.Save(f.Request, w); err != nil {
  88. qu.Debug("session1保存错误,验证码 ", id)
  89. }
  90. err2 := captcha.WriteImage(w, id, 90, 30)
  91. if err2 != nil {
  92. qu.Debug("生成图片验证码错误,验证码 ", id)
  93. }
  94. return
  95. }
  96. func (f *Front) Logout() {
  97. f.DelSession("user")
  98. f.Redirect("/")
  99. }