login_api.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package admin
  2. import (
  3. "ulink-admin/frame"
  4. "ulink-admin/modules/system/models/model"
  5. "ulink-admin/modules/system/models/req"
  6. service2 "ulink-admin/modules/system/service"
  7. "ulink-admin/pkg/cache"
  8. "ulink-admin/pkg/captcha"
  9. "ulink-admin/pkg/jwt/admin"
  10. "ulink-admin/pkg/library/tree/tree_menu"
  11. "ulink-admin/pkg/tool"
  12. )
  13. type LoginApi struct {
  14. LoginService *service2.LoginService `inject:""`
  15. PermissionService *service2.PermissionService `inject:""`
  16. UserService *service2.UserService `inject:""`
  17. MenuService *service2.MenuService `inject:""`
  18. }
  19. // Login 登录
  20. // @Summary 登录接口
  21. // @Description 用户登录接口
  22. // @Tags 用户登录相关接口
  23. // @Accept application/json
  24. // @Produce application/json
  25. // @Param data body req.LoginBody true "登录实体对象"
  26. // @Success 200 {object} resp.Response{data=map[stirng]string,msg=string} "返回登录结果"
  27. // @Router /login [post]
  28. func (a LoginApi) Login(c *frame.Context) {
  29. loginBody := req.LoginBody{}
  30. err := c.BindJSON(&loginBody)
  31. c.ValidteError(err, loginBody)
  32. isValidated := captcha.VerifyCaptcha(loginBody.Uuid, loginBody.Code)
  33. if !isValidated {
  34. c.Error("验证码错误")
  35. return
  36. }
  37. m := make(map[string]string)
  38. priKey := "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY" +
  39. "7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN" +
  40. "PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA" +
  41. "kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow" +
  42. "cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv" +
  43. "DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh" +
  44. "YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3" +
  45. "UP8iWi1Qw0Y="
  46. priKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMZzL52gRgjJWN\n4ptiX9Qm6ucfBmd5+j8mDH7JrcG2qOBGl03rYTUGCcIq2xOdSFy93Zr6h2dFL73V\n5Du7QyN6w1nc2w4eUAXw7HPD8YyGaMFCSe38LAAsZS7Wl5pmGkpizCYVdwlDBvGk\n/A7FD1SJH5zIJagR05Ox/78LDsmL4YLpN3F2UpixcHp8jn0cx57uYNiq8k4KUS9/\ncwlFsUPRn1c/+Bi0hv+DyWLuTMb5Unzneqwcc1uBfCaams/8ujzt61rWBUI8+hyv\nmewTWp5dR7vqyzCir6/Tkr6prxsDhZB70JZIKXYpD6pFK6DGTPPgrhEO5jaEsI8t\n5+pzLVkrAgMBAAECggEAFwB6BRHasj6/ybK5h61/A04l6iDfXiOiHZcEYY+zH+oL\nKwZ110oeHGrWtdnncCinfxpECXNZVLjVpQ9FBYK9qF/5adgg05pvwLfrIx64kJuT\nO/Fz3Y/aCSTty2pODrVgr5OHqZy2pxtN8CIJS3W5LqEnFILgUfk8QqikCAuG9L2d\nPqZ+SPw1mcDXR6XGDc43ye4EpMfg3c0ngrvJj33ypkk/4MqxA7oEi209NqDr7arH\nocNf+piQFg1XBC7+yNiteiG+CffXE5PaVzbKcbeOXaNv6038SRbSDl7eGHdXqkac\nlgJw45vBn1lt6Zmm2uy8STegiy5nQdK5AqbxaAsu6QKBgQD5lPxIRdUowmMEXsDQ\nqCcsd31SL7WRsmas7SJ1fDRTE9MhWfiY9tdKwzxwpYMaZNo8tentkCkfWcMb4aCc\nMfRSUdOZvOZ4GLj5BeXCOm3GNyx37UunFjiFjH1plYN2Jc+0v/jJvAeTXEYwpVV+\nFA0ejKwj6LrW37nPkjvxA8XSnwKBgQDRqMxc5LtGAM9Kkh76rQ8Nnw6eF6peN0lD\nOe2RoA8kUKrG/hpfaOJXXJ9kEwyUS8ItONrLLyOle/0KQM3yH2tXisx1VQmCe1lW\nGM/XNyr5xyRFdQOzGKDZW5Dj8PUba5pWLPfOjxhd61TnUBVvJYHHTmMgvNIdO5RP\nt/+O+W7Z9QKBgHxhsH0AOGQQxDIIWsViF+vEPPN5jV5n712c7IBqftUsWxsS8J6i\n3daHiBaHldfQjSaWbleTcbsLC/5YKqfNCXsBBphmmOEfSQfp1YA/iDexhXrbCsnh\nfBeqVVIKTjLSUzo8Neurxoa9BMn3i6zCp2sjJiLbOEofw0VcFn1dqPf3AoGAOrqj\n9GmGJAfaCTOBRgrwKoqhl5tdd+LYvOIfMCm71BpcnD1VueAxdvNVGr1TSr8l93Dz\nqPLdc1+V9CdPCUHP2cfhmgRmE4zl634rykeD3E/yUxqCHMsLU5eYsKEwp6uuofEa\nwVvIIZboQ5tlRasl/WRx1BvQZ6vm0aXjCnPIn3kCgYEAszDHu3tjh41APRf3We9x\nov2GtBUq+4n+6c66bl4dODER3Rj/ZTP1phYeYmdw4kgI/j4eabQSBlkWqx5NOP92\nte+NXDQc2OIuFzH0G16d3dLidHaI4WY/LDRxNS8/owzyDZGJAoPtkTHHR+0W32Y8\nLr76/MhhtQnxEu6pHWer6Nk="
  47. dpwd, eorr := tool.RSADecryptByPrivateKey(loginBody.Password, priKey)
  48. if eorr != nil {
  49. c.Error("密码解密错误")
  50. return
  51. }
  52. loginBody.Password = string(dpwd)
  53. s := a.LoginService.Login(loginBody.UserName, loginBody.Password)
  54. //将token存入到redis中
  55. admin.SaveRedisToken(s)
  56. m["token"] = s
  57. c.Ok(m)
  58. }
  59. // captcha 获取验证码接口
  60. // @Summary 获取验证码接口
  61. // @Description 获取验证码接口
  62. // @Tags 用户登录相关接口
  63. // @Accept application/json
  64. // @Produce application/json
  65. // @Success 200 {object} resp.Response{data=captcha.CaptchaInfo,msg=string} "返回验证码查询"
  66. // @Router /getCaptcha [get]
  67. func (a LoginApi) GetCaptcha(c *frame.Context) {
  68. id, image, error := captcha.CreateCode()
  69. captchaInfo := new(captcha.CaptchaInfo)
  70. if error != nil {
  71. frame.Throw(frame.BUSINESS_CODE, "获取验证码错误")
  72. }
  73. captchaInfo.Id = id
  74. captchaInfo.Image = image
  75. c.Ok(captchaInfo)
  76. }
  77. // GetUserInfo 获取用户信息
  78. // Login 用户详情查询接口
  79. // @Summary 用户详情查询接口
  80. // @Description 用户详情查询接口
  81. // @Tags 用户登录相关接口
  82. // @Accept application/json
  83. // @Produce application/json
  84. // @Param Authorization header string false "Bearer 令牌"
  85. // @Success 200 {object} resp.Response{data=map[stirng]interface{},msg=string} "返回用户详情查询"
  86. // @Router /getInfo [get]
  87. func (a LoginApi) GetUserInfo(c *frame.Context) {
  88. m := make(map[string]interface{})
  89. user := a.LoginService.LoginUser(c)
  90. record := new(model.SysUser)
  91. a.UserService.GetById(user.Id, record)
  92. //查询用户角色集合
  93. roleKeys := a.PermissionService.GetRolePermissionByUserId(record)
  94. // 权限集合
  95. perms := a.PermissionService.GetMenuPermission(record)
  96. menus := a.MenuService.GetMenuTreeByUserId(user)
  97. systemMenus := tree_menu.SystemMenus{}
  98. systemMenus = *menus
  99. array := systemMenus.ConvertToINodeArray()
  100. generateTree := tree_menu.GenerateTree(array, nil)
  101. m["roles"] = roleKeys
  102. m["permissions"] = perms
  103. m["user"] = user
  104. m["menu"] = generateTree
  105. c.Ok(m)
  106. }
  107. // GetRouters 根据用户ID查询菜单
  108. // Login 登录
  109. // @Summary 用户菜单查询接口
  110. // @Description 用户菜单查询接口
  111. // @Tags 用户登录相关接口
  112. // @Accept application/json
  113. // @Produce application/json
  114. // @Param Authorization header string false "Bearer 令牌"
  115. // @Success 200 {object} resp.Response{data=[]tree_menu.Tree,msg=string} "返回用户菜单查询"
  116. // @Router /getRouters [get]
  117. func (a LoginApi) GetRouters(c *frame.Context) {
  118. //获取等钱登录用户
  119. user := a.LoginService.LoginUser(c)
  120. menus := a.MenuService.GetMenuTreeByUserId(user)
  121. systemMenus := tree_menu.SystemMenus{}
  122. systemMenus = *menus
  123. array := systemMenus.ConvertToINodeArray()
  124. generateTree := tree_menu.GenerateTree(array, nil)
  125. c.Ok(generateTree)
  126. }
  127. // Logout 退出登录
  128. // @Summary 退出登录接口
  129. // @Description 退出登录接口
  130. // @Tags 用户登录相关接口
  131. // @Accept application/json
  132. // @Produce application/json
  133. // @Param Authorization header string false "Bearer 令牌"
  134. // @Success 200 {object} resp.Response "返回退出结果"
  135. // @Router /logout [post]
  136. func (a LoginApi) Logout(c *frame.Context) {
  137. //删除Redis缓存
  138. name := admin.GetJWTRedisKey(c)
  139. cache.RemoveKey(name)
  140. }