auth.go 3.5 KB

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