|
@@ -8,6 +8,7 @@ import (
|
8
|
8
|
"spaceofcheng/services/models/customer"
|
9
|
9
|
"spaceofcheng/services/models/model"
|
10
|
10
|
"spaceofcheng/services/utils"
|
|
11
|
+ "strconv"
|
11
|
12
|
"strings"
|
12
|
13
|
"time"
|
13
|
14
|
|
|
@@ -54,20 +55,37 @@ func (s *SysServ) AuthAndInitCtx(gctx *context.Context) map[string]interface{} {
|
54
|
55
|
}
|
55
|
56
|
}
|
56
|
57
|
|
|
58
|
+ // 客户端类型
|
|
59
|
+ // 通过 UA 判断
|
|
60
|
+ clientType := utils.GetClientType(gctx.Request)
|
|
61
|
+ if clientType == utils.ClientWechat {
|
|
62
|
+ // 初始化微信配置
|
|
63
|
+ if err := s.initWechatClient(s.org.OrgId); err != nil {
|
|
64
|
+ utils.LogError("初始化微信客户端失败: " + err.Error())
|
|
65
|
+
|
|
66
|
+ return map[string]interface{}{
|
|
67
|
+ "code": http.StatusInternalServerError,
|
|
68
|
+ "error": errors.New("初始化微信客户端失败"),
|
|
69
|
+ }
|
|
70
|
+ }
|
|
71
|
+ }
|
|
72
|
+
|
57
|
73
|
// 获取 token
|
58
|
|
- token, err := s.getToken(gctx)
|
|
74
|
+ token, err := s.getToken(gctx, clientType)
|
59
|
75
|
if err != nil {
|
|
76
|
+ message := make(map[string]interface{})
|
|
77
|
+ if clientType == utils.ClientWechat {
|
|
78
|
+ message["appid"] = utils.GetWxAppID(s.org.OrgId)
|
|
79
|
+ }
|
|
80
|
+
|
60
|
81
|
// token 报错一律视为需要重新登录
|
61
|
82
|
return map[string]interface{}{
|
62
|
|
- "code": http.StatusUnauthorized,
|
63
|
|
- "error": err,
|
|
83
|
+ "code": http.StatusUnauthorized,
|
|
84
|
+ "error": err,
|
|
85
|
+ "message": message,
|
64
|
86
|
}
|
65
|
87
|
}
|
66
|
88
|
|
67
|
|
- // 客户端类型
|
68
|
|
- // 通过 UA 判断
|
69
|
|
- clientType := utils.GetClientType(gctx.Request)
|
70
|
|
-
|
71
|
89
|
// pc 管理端
|
72
|
90
|
if clientType == utils.ClientAdmin {
|
73
|
91
|
return s.authPCAdmin(gctx, token)
|
|
@@ -163,21 +181,20 @@ func (s *SysServ) authWechat(gctx *context.Context, token *utils.JWTToken) map[s
|
163
|
181
|
|
164
|
182
|
// 未登录 或 未验证
|
165
|
183
|
if token.ID == "" {
|
166
|
|
- // 需要微信验证
|
167
|
|
- if code == "" {
|
168
|
|
- return map[string]interface{}{
|
169
|
|
- "code": http.StatusUnauthorized,
|
170
|
|
- "error": errors.New("请授权微信用户登录"),
|
171
|
|
- "message": map[string]interface{}{
|
172
|
|
- "appid": utils.GetWxAppID(s.org.OrgId),
|
173
|
|
- },
|
174
|
|
- }
|
175
|
|
- }
|
176
|
|
-
|
177
|
184
|
// 微信用户信息
|
178
|
185
|
var err error
|
179
|
186
|
wxUser, err = s.wechartSignIn(gctx, code)
|
180
|
187
|
if err != nil {
|
|
188
|
+ if strings.Index(err.Error(), strconv.Itoa(http.StatusUnauthorized)) > -1 {
|
|
189
|
+ return map[string]interface{}{
|
|
190
|
+ "code": http.StatusUnauthorized,
|
|
191
|
+ "error": errors.New("请授权微信用户登录"),
|
|
192
|
+ "message": map[string]interface{}{
|
|
193
|
+ "appid": utils.GetWxAppID(s.org.OrgId),
|
|
194
|
+ },
|
|
195
|
+ }
|
|
196
|
+ }
|
|
197
|
+
|
181
|
198
|
return map[string]interface{}{
|
182
|
199
|
"code": http.StatusInternalServerError,
|
183
|
200
|
"error": err,
|
|
@@ -299,10 +316,8 @@ func (s *SysServ) wechartSignIn(gctx *context.Context, code string) (*utils.Wech
|
299
|
316
|
}, nil
|
300
|
317
|
}
|
301
|
318
|
|
302
|
|
- // 初始化微信配置
|
303
|
|
- if err := s.initWechatClient(s.org.OrgId); err != nil {
|
304
|
|
- utils.LogError("初始化微信客户端失败: " + err.Error())
|
305
|
|
- return nil, errors.New("初始化微信客户端失败")
|
|
319
|
+ if code == "" {
|
|
320
|
+ return nil, errors.New(strconv.Itoa(http.StatusUnauthorized))
|
306
|
321
|
}
|
307
|
322
|
|
308
|
323
|
// 获取 微信信息
|
|
@@ -319,10 +334,21 @@ func (s *SysServ) wechartSignIn(gctx *context.Context, code string) (*utils.Wech
|
319
|
334
|
return utils.MapToWechatUser(wxUserMap), nil
|
320
|
335
|
}
|
321
|
336
|
|
322
|
|
-func (s *SysServ) getToken(gctx *context.Context) (*utils.JWTToken, error) {
|
|
337
|
+func (s *SysServ) getToken(gctx *context.Context, clientType string) (*utils.JWTToken, error) {
|
|
338
|
+ if beego.BConfig.RunMode == "dev" {
|
|
339
|
+ id := "0"
|
|
340
|
+ if clientType == utils.ClientWechat {
|
|
341
|
+ id = "OPENID"
|
|
342
|
+ }
|
|
343
|
+
|
|
344
|
+ return &utils.JWTToken{
|
|
345
|
+ ID: id,
|
|
346
|
+ }, nil
|
|
347
|
+ }
|
|
348
|
+
|
323
|
349
|
tokenRaw := gctx.Input.Header(utils.TokenHeader)
|
324
|
350
|
if tokenRaw == "" {
|
325
|
|
- return nil, nil
|
|
351
|
+ return new(utils.JWTToken), nil
|
326
|
352
|
}
|
327
|
353
|
|
328
|
354
|
tokenEnStr := strings.Trim(strings.TrimLeft(tokenRaw, utils.TokenSchema), " ")
|
|
@@ -490,7 +516,7 @@ func (s *SysServ) CheckWechatUserMapping(user map[string]interface{}) (*model.Ta
|
490
|
516
|
}
|
491
|
517
|
|
492
|
518
|
// initWechatClient 初始化微信客户端
|
493
|
|
-func (s SysServ) initWechatClient(orgID string) error {
|
|
519
|
+func (s *SysServ) initWechatClient(orgID string) error {
|
494
|
520
|
conf, err := s.dao.GetWeChatConfig(orgID)
|
495
|
521
|
if err != nil {
|
496
|
522
|
utils.LogError("获取微信配置失败: " + err.Error())
|
|
@@ -514,7 +540,7 @@ func (s SysServ) initWechatClient(orgID string) error {
|
514
|
540
|
}
|
515
|
541
|
|
516
|
542
|
// SetOrgByID 获取组织
|
517
|
|
-func (s SysServ) SetOrgByID(orgID string) error {
|
|
543
|
+func (s *SysServ) SetOrgByID(orgID string) error {
|
518
|
544
|
orgID = utils.DecodeBase64NoTail(orgID)
|
519
|
545
|
|
520
|
546
|
org, err := s.dao.GetOrg(orgID)
|