login.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package api
  2. import (
  3. "crazy-fox-backend-api/model"
  4. "crazy-fox-backend-api/service"
  5. "crazy-fox-backend-api/utils"
  6. "crazy-fox-backend-api/utils/answer"
  7. "crazy-fox-backend-api/utils/jwt"
  8. "github.com/gin-gonic/gin"
  9. )
  10. type loginApi struct{}
  11. // Login 用户登录
  12. func (Api *loginApi) Login(c *gin.Context) {
  13. var req model.ReqLogin
  14. utils.Verify(&req, utils.LoginVerify, c)
  15. err, resInfo := service.Login.Login(req)
  16. if err != nil {
  17. answer.FailWithMessage("登录失败", err, c)
  18. }
  19. // 获取登录信息
  20. loginInfo := service.Login.BuildLoginInfo(resInfo)
  21. answer.OkWithDetailed(loginInfo, "登录成功", c)
  22. }
  23. // FsLogin 飞书扫码登录/web登录
  24. func (Api *loginApi) FsLogin(c *gin.Context) {
  25. code, _ := c.GetQuery("code")
  26. // 登录逻辑
  27. if res, err := service.Login.FsLogin(code); err != nil {
  28. c.HTML(200, "error.html", model.LoginE{Err: err.Error()})
  29. } else {
  30. c.HTML(200, "login.html", service.Login.BuildFsLoginInfo(res))
  31. }
  32. }
  33. // FsBind 用户飞书ID绑定
  34. func (Api *loginApi) FsBind(c *gin.Context) {
  35. code, _ := c.GetQuery("code")
  36. token, _ := c.GetQuery("state")
  37. // parseToken 解析token包含的信息
  38. claims, err := jwt.NewJWT().ParseToken(token)
  39. if err != nil || claims == nil {
  40. c.HTML(200, "error.html", model.LoginE{Err: "Token 信息有误,绑定失败"})
  41. }
  42. userId := claims.BaseClaims.ID
  43. if fsUserInfo, err := service.Login.BindFs(code, userId); err != nil {
  44. c.HTML(200, "error.html", model.LoginE{Err: err.Error()})
  45. } else {
  46. c.HTML(200, "bindSuccess.html", service.Login.BuildFsBindInfo(fsUserInfo))
  47. }
  48. }