feat: logout current user when token changed
正在显示
7 个修改的文件
包含
83 行增加
和
9 行删除
@@ -19,10 +19,16 @@ type CreateFileCommand struct { | @@ -19,10 +19,16 @@ type CreateFileCommand struct { | ||
19 | FileSize int `cname:"文件大小" json:"fileSize" valid:"Required"` | 19 | FileSize int `cname:"文件大小" json:"fileSize" valid:"Required"` |
20 | } | 20 | } |
21 | 21 | ||
22 | +var MaxFileSize = 50 * 1024 * 1024 | ||
23 | + | ||
22 | func (createFileCommand *CreateFileCommand) Valid(validation *validation.Validation) { | 24 | func (createFileCommand *CreateFileCommand) Valid(validation *validation.Validation) { |
23 | ext := filepath.Ext(createFileCommand.Name) | 25 | ext := filepath.Ext(createFileCommand.Name) |
24 | if !(ext == domain.XLS || ext == domain.XLSX) { | 26 | if !(ext == domain.XLS || ext == domain.XLSX) { |
25 | - validation.Error(fmt.Sprintf("仅支持文件格式 xls 、 xlsx")) | 27 | + validation.Error("仅支持文件格式 xls 、 xlsx") |
28 | + return | ||
29 | + } | ||
30 | + if createFileCommand.FileSize > 0 && createFileCommand.FileSize > MaxFileSize { | ||
31 | + validation.Error("文件大小超过50M") | ||
26 | return | 32 | return |
27 | } | 33 | } |
28 | } | 34 | } |
@@ -20,9 +20,9 @@ type TablePreviewCommand struct { | @@ -20,9 +20,9 @@ type TablePreviewCommand struct { | ||
20 | } | 20 | } |
21 | 21 | ||
22 | func (cmd *TablePreviewCommand) Valid(validation *validation.Validation) { | 22 | func (cmd *TablePreviewCommand) Valid(validation *validation.Validation) { |
23 | - if cmd.UseCache && cmd.PageSize==0{ | 23 | + if cmd.UseCache && cmd.PageSize == 0 { |
24 | cmd.PageNumber = 1 | 24 | cmd.PageNumber = 1 |
25 | - cmd.PageSize = 10000 //默认缓存前10000条 | 25 | + cmd.PageSize = 30000 //默认缓存前30000条 |
26 | } | 26 | } |
27 | if cmd.PageSize > 0 { | 27 | if cmd.PageSize > 0 { |
28 | cmd.Where.PageNumber = cmd.PageNumber | 28 | cmd.Where.PageNumber = cmd.PageNumber |
pkg/domain/enums_error.go
0 → 100644
1 | +package domain | ||
2 | + | ||
3 | +const ( | ||
4 | + InvalidAccessToken = 901 | ||
5 | + InvalidRefreshToken = 902 | ||
6 | + InvalidSign = 903 | ||
7 | + InvalidClientId = 904 | ||
8 | + InvalidUUid = 905 | ||
9 | +) | ||
10 | + | ||
11 | +var CodeMsg = map[int]string{ | ||
12 | + InvalidAccessToken: "access token 过期或无效,需刷新令牌", | ||
13 | + InvalidRefreshToken: "过期或失效,需重新进行登录认证操作", //refresh token | ||
14 | + InvalidSign: "sign 签名无效,需重新登录手机 APP", | ||
15 | + InvalidClientId: "client id 或 client secret 无效,需强制更新手机 APP", | ||
16 | + InvalidUUid: "uuid 无效", | ||
17 | +} |
@@ -47,3 +47,20 @@ func (gateway *ApiAuthLib) MeInfo(param RequestUserMeQuery) (*DataUserMe, error) | @@ -47,3 +47,20 @@ func (gateway *ApiAuthLib) MeInfo(param RequestUserMeQuery) (*DataUserMe, error) | ||
47 | } | 47 | } |
48 | return &data, nil | 48 | return &data, nil |
49 | } | 49 | } |
50 | + | ||
51 | +func (gateway *ApiAuthLib) LoginCheck(param RequestLoginCheck) (*DataLoginCheck, error) { | ||
52 | + url := gateway.Host() + "/v1/login/check?token=" + param.Token | ||
53 | + method := "get" | ||
54 | + var data DataLoginCheck | ||
55 | + err := gateway.FastDoRequest(url, method, param, &data, api.WithHeader(gateway.DefaultHeader())) | ||
56 | + if errCodeMsg, ok := err.(api.ErrCodeMsg); ok { | ||
57 | + return &DataLoginCheck{ | ||
58 | + Code: errCodeMsg.Code, | ||
59 | + Msg: errCodeMsg.Msg, | ||
60 | + }, nil | ||
61 | + } | ||
62 | + if err != nil { | ||
63 | + return nil, err | ||
64 | + } | ||
65 | + return &data, nil | ||
66 | +} |
@@ -42,3 +42,11 @@ type DataUserMe struct { | @@ -42,3 +42,11 @@ type DataUserMe struct { | ||
42 | Types string `json:"types"` | 42 | Types string `json:"types"` |
43 | } `json:"menus"` | 43 | } `json:"menus"` |
44 | } | 44 | } |
45 | + | ||
46 | +type RequestLoginCheck struct { | ||
47 | + Token string | ||
48 | +} | ||
49 | +type DataLoginCheck struct { | ||
50 | + Code int `json:"code"` | ||
51 | + Msg string `json:"msg"` | ||
52 | +} |
@@ -8,6 +8,7 @@ import ( | @@ -8,6 +8,7 @@ import ( | ||
8 | "github.com/linmadan/egglib-go/web/beego/filters" | 8 | "github.com/linmadan/egglib-go/web/beego/filters" |
9 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/constant" | 9 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/constant" |
10 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" | 10 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/domain" |
11 | + "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/infrastructure/api/authlib" | ||
11 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/port/beego/controllers" | 12 | "gitlab.fjmaimaimai.com/allied-creation/character-library-metadata-bastion/pkg/port/beego/controllers" |
12 | "net/http" | 13 | "net/http" |
13 | "os" | 14 | "os" |
@@ -76,6 +77,9 @@ func CreateRequestLogFilter(console bool) func(ctx *context.Context) { | @@ -76,6 +77,9 @@ func CreateRequestLogFilter(console bool) func(ctx *context.Context) { | ||
76 | } | 77 | } |
77 | 78 | ||
78 | func JwtFilter() func(ctx *context.Context) { | 79 | func JwtFilter() func(ctx *context.Context) { |
80 | + authLib := authlib.NewApiAuthLib(constant.AUTH_SERVER_HOST) | ||
81 | + authLib.BaseServiceGateway.ConnectTimeout = 200 * time.Millisecond | ||
82 | + authLib.BaseServiceGateway.ReadWriteTimeout = 200 * time.Millisecond | ||
79 | return func(ctx *context.Context) { | 83 | return func(ctx *context.Context) { |
80 | //token := ctx.Request.Header.Get("Authorization") | 84 | //token := ctx.Request.Header.Get("Authorization") |
81 | token := ctx.Request.Header.Get("x-mmm-accesstoken") | 85 | token := ctx.Request.Header.Get("x-mmm-accesstoken") |
@@ -85,17 +89,35 @@ func JwtFilter() func(ctx *context.Context) { | @@ -85,17 +89,35 @@ func JwtFilter() func(ctx *context.Context) { | ||
85 | err := userToken.ParseToken(token) | 89 | err := userToken.ParseToken(token) |
86 | if err != nil { | 90 | if err != nil { |
87 | ctx.Output.SetStatus(http.StatusOK) | 91 | ctx.Output.SetStatus(http.StatusOK) |
88 | - ctx.Output.JSON(map[string]interface{}{ | ||
89 | - "msg": "token 过期或无效,需刷新令牌", | ||
90 | - "code": 901, | ||
91 | - "data": struct{}{}, | ||
92 | - }, false, false) | 92 | + ctx.Output.JSON(WithCodeMsgResponse(domain.InvalidRefreshToken), false, false) |
93 | return | 93 | return |
94 | } | 94 | } |
95 | + if userToken.UserId > 0 && userToken.CompanyId > 0 { | ||
96 | + loginCheckResponse, _ := authLib.LoginCheck(authlib.RequestLoginCheck{Token: token}) | ||
97 | + if loginCheckResponse != nil && loginCheckResponse.Code == 901 { | ||
98 | + ctx.Output.SetStatus(http.StatusOK) | ||
99 | + ctx.Output.JSON(WithCodeMsgResponse(domain.InvalidRefreshToken), false, false) | ||
100 | + return | ||
101 | + } | ||
102 | + } | ||
95 | ctx.Input.SetData("UserToken", userToken) | 103 | ctx.Input.SetData("UserToken", userToken) |
104 | + ctx.Input.SetData("Accesstoken", token) | ||
96 | } | 105 | } |
97 | } | 106 | } |
98 | } | 107 | } |
108 | + | ||
109 | +func WithCodeMsgResponse(code int) map[string]interface{} { | ||
110 | + msg := "token 过期或无效,需刷新令牌" | ||
111 | + if codeMsg, ok := domain.CodeMsg[code]; ok { | ||
112 | + msg = codeMsg | ||
113 | + } | ||
114 | + return map[string]interface{}{ | ||
115 | + "msg": msg, | ||
116 | + "code": code, | ||
117 | + "data": struct{}{}, | ||
118 | + } | ||
119 | +} | ||
120 | + | ||
99 | func RequestCostBefore() func(ctx *context.Context) { | 121 | func RequestCostBefore() func(ctx *context.Context) { |
100 | return func(ctx *context.Context) { | 122 | return func(ctx *context.Context) { |
101 | ctx.Input.SetData("cost-begin", time.Now().UnixMilli()) | 123 | ctx.Input.SetData("cost-begin", time.Now().UnixMilli()) |
@@ -57,7 +57,11 @@ func ParseContext(c beego.BaseController) *domain.Context { | @@ -57,7 +57,11 @@ func ParseContext(c beego.BaseController) *domain.Context { | ||
57 | v := cacheItem.(*authlib.DataUserMe) | 57 | v := cacheItem.(*authlib.DataUserMe) |
58 | userName = v.User.NickName | 58 | userName = v.User.NickName |
59 | } else { | 59 | } else { |
60 | - requestToken, _ := userToken.GenerateToken() | 60 | + //requestToken, _ := userToken.GenerateToken() |
61 | + requestToken, ok := c.Ctx.Input.GetData("Accesstoken").(string) | ||
62 | + if !ok { | ||
63 | + goto END | ||
64 | + } | ||
61 | authLib := authlib.NewApiAuthLib(constant.AUTH_SERVER_HOST).WithToken(requestToken) | 65 | authLib := authlib.NewApiAuthLib(constant.AUTH_SERVER_HOST).WithToken(requestToken) |
62 | userInfo, err := authLib.MeInfo(authlib.RequestUserMeQuery{ | 66 | userInfo, err := authLib.MeInfo(authlib.RequestUserMeQuery{ |
63 | UserId: int(userToken.UserId), | 67 | UserId: int(userToken.UserId), |
-
请 注册 或 登录 后发表评论