auth.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package middleware
  2. import (
  3. "baize_scaffold/gateway/gw/config"
  4. "fmt"
  5. "net/http"
  6. "github.com/pkg/errors"
  7. "git.sxidc.com/go-framework/baize/framework/core/api/response"
  8. "git.sxidc.com/go-framework/baize/framework/gateway"
  9. "git.sxidc.com/service-supports/fslog"
  10. "github.com/dgrijalva/jwt-go/request"
  11. )
  12. func Authentication() gateway.Handler {
  13. return func(requestBuilder *gateway.RequestBuilder) {
  14. c := requestBuilder.ApiContext()
  15. respFunc := response.SendMapResponse
  16. token, err := request.AuthorizationHeaderExtractor.ExtractToken(c.Request)
  17. if err != nil {
  18. fslog.Error(err)
  19. respFunc(c, http.StatusUnauthorized, map[string]any{
  20. "accessToken": "",
  21. }, errors.New("token错误"))
  22. c.Abort()
  23. return
  24. }
  25. requestBuilder.Post(&gateway.PostRequest{
  26. Url: config.GetGatewayConfig().ServicesConfig.UMBaseUrl + "/utm/api/v1/checkToken",
  27. Body: map[string]any{
  28. "token": token,
  29. "resource": c.FullPath(),
  30. "action": c.Request.Method,
  31. },
  32. }).ResponseSuccessCallback(func(c *gateway.RequestBuilderContext) {
  33. userID, ok := c.GetResultMapValue("userId").(string)
  34. if !ok {
  35. fslog.Error(err)
  36. respFunc(c.ApiContext(), http.StatusUnauthorized, map[string]any{
  37. "accessToken": "",
  38. }, errors.New("用户ID获取错误"))
  39. c.ApiContext().Abort()
  40. }
  41. }).Request()
  42. c.SetUserInfo(&UserInfoWithRoles{
  43. ID: umCheckResult.UserID,
  44. UserName: umCheckResult.UserName,
  45. Updated: umCheckResult.Updated,
  46. ProfileName: tangentSimpleUserInfo.Name,
  47. OrgInfo: currentTenant,
  48. RoleInfos: roles,
  49. TangentUserProfile: tangentSimpleUserInfo,
  50. })
  51. c.SetTenantInfo(currentTenant)
  52. c.Next()
  53. }
  54. }