auth.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package handler
  2. import (
  3. "context"
  4. "dashoo.cn/common_definition/admin/user_def"
  5. "dashoo.cn/common_definition/comm_def"
  6. "dashoo.cn/micro/app/service"
  7. "dashoo.cn/opms_libary/gtoken"
  8. "dashoo.cn/opms_libary/micro_srv"
  9. "dashoo.cn/opms_libary/myerrors"
  10. "github.com/gogf/gf/encoding/gjson"
  11. "github.com/gogf/gf/errors/gerror"
  12. "github.com/gogf/gf/frame/g"
  13. "github.com/gogf/gf/os/glog"
  14. "github.com/gogf/gf/util/gconv"
  15. "dashoo.cn/common_definition/auth"
  16. )
  17. type AuthHandler struct{}
  18. func init() {
  19. // 启动gtoken
  20. gtoken.GFToken = &gtoken.GfToken{
  21. Timeout: 24 * 60 * 60 * 1000, // 24小时
  22. EncryptKey: []byte(g.Config().GetString("gtoken.encrypt-key")),
  23. CacheMode: g.Config().GetInt8("gtoken.cache-mode"),
  24. MultiLogin: g.Config().GetBool("gtoken.multi-login"),
  25. }
  26. gtoken.GFToken.Start()
  27. }
  28. // Login 用户登录验证
  29. func (h *AuthHandler) Login(ctx context.Context, req *user_def.LoginReq, rsp *comm_def.CommonMsg) error {
  30. // 参数验证
  31. if req.UserName == "" || req.Password == "" {
  32. return NoParamsErr
  33. }
  34. userService, err := service.NewUserService(ctx)
  35. if err != nil {
  36. g.Log().Error(err)
  37. return gerror.New("系统异常,请重新尝试")
  38. }
  39. userInfo, err := userService.Login(req.UserName, req.Password)
  40. _, err, rsp.Code, rsp.Msg = myerrors.CheckError(err)
  41. loginLogService, _ := service.NewLoginLogService(ctx)
  42. loginLogService.Invoke(ctx, req.UserName, rsp.Msg)
  43. if err != nil {
  44. return err
  45. }
  46. tenant, _ := micro_srv.GetTenant(ctx)
  47. tokenResp := gtoken.GFToken.GetOrGenToken(tenant, userInfo.UserName, userInfo.Uuid, userInfo)
  48. rsp.Msg = tokenResp.Msg
  49. rsp.Data = tokenResp.Data
  50. return nil
  51. }
  52. // LogOut 退出登录
  53. func (h *AuthHandler) LogOut(ctx context.Context, req interface{}, rsp *comm_def.CommonMsg) error {
  54. token, err := micro_srv.GetToken(ctx)
  55. if err != nil {
  56. return err
  57. } else if token == "" {
  58. return NoParamsErr
  59. }
  60. tokenResp := gtoken.GFToken.RemoveToken(token)
  61. _, err, rsp.Code, rsp.Msg = myerrors.CheckError(err)
  62. if err != nil {
  63. return err
  64. }
  65. rsp.Msg = tokenResp.Msg
  66. rsp.Data = tokenResp.Data
  67. return nil
  68. }
  69. func (h *AuthHandler) GetToken(ctx context.Context, req *auth.Request, rsp *auth.Response) (err error) {
  70. glog.Info("Received AuthHandler.GetToken request, UserKey:", req.UserKey, " @ ", req.Tenant)
  71. // 获取Data,换成对象
  72. var json interface{}
  73. if req.Data != "" {
  74. json, err = gjson.DecodeToJson(req.Data)
  75. if err != nil {
  76. return err
  77. }
  78. }
  79. tokenResp := gtoken.GFToken.GetOrGenToken(req.Tenant, req.UserKey, req.Uuid, json)
  80. if err := gconv.Struct(tokenResp, rsp); err != nil {
  81. return err
  82. }
  83. glog.Info(tokenResp.DataString())
  84. return nil
  85. }
  86. func (h *AuthHandler) RemoveToken(ctx context.Context, reqToken string, rsp *auth.Response) error {
  87. glog.Info("Received AuthHandler.RemoveToken request, token:", reqToken)
  88. tokenResp := gtoken.GFToken.RemoveToken(reqToken)
  89. if err := gconv.Struct(tokenResp, rsp); err != nil {
  90. return err
  91. }
  92. return nil
  93. }
  94. func (h *AuthHandler) ValidToken(ctx context.Context, reqToken string, rsp *auth.Response) error {
  95. glog.Info("Received AuthHandler.ValidToken request, token:", reqToken)
  96. tokenResp := gtoken.GFToken.ValidToken(reqToken)
  97. if err := gconv.Struct(tokenResp, rsp); err != nil {
  98. return err
  99. }
  100. return nil
  101. }