正在显示
3 个修改的文件
包含
30 行增加
和
75 行删除
@@ -107,45 +107,36 @@ func (svr AuthService) AuthLoginSms(loginCommand *command.LoginSmsCommand) (inte | @@ -107,45 +107,36 @@ func (svr AuthService) AuthLoginSms(loginCommand *command.LoginSmsCommand) (inte | ||
107 | 107 | ||
108 | //AuthLoginQrcode 扫码登录 | 108 | //AuthLoginQrcode 扫码登录 |
109 | func (svr AuthService) AuthLoginQrcode(queryParam *query.QrcodeLoginStatusQuery) (interface{}, error) { | 109 | func (svr AuthService) AuthLoginQrcode(queryParam *query.QrcodeLoginStatusQuery) (interface{}, error) { |
110 | - qrmsg := domain.QrcodeMessage{} | ||
111 | failLoginData := map[string]interface{}{ | 110 | failLoginData := map[string]interface{}{ |
112 | "isLogin": false, | 111 | "isLogin": false, |
113 | "access": struct{}{}, | 112 | "access": struct{}{}, |
114 | } | 113 | } |
115 | - err := qrmsg.ParseToken(queryParam.Key) | 114 | + cache := cache.LoginQrcodeCache{} |
115 | + qrcodeMessage, err := cache.Get(queryParam.Key) | ||
116 | if err != nil { | 116 | if err != nil { |
117 | log.Logger.Error(err.Error()) | 117 | log.Logger.Error(err.Error()) |
118 | return nil, application.ThrowError(application.TRANSACTION_ERROR, "二维码已失效") | 118 | return nil, application.ThrowError(application.TRANSACTION_ERROR, "二维码已失效") |
119 | } | 119 | } |
120 | - qrCache := cache.LoginQrcodeCache{} | ||
121 | - qrmsgCache, err := qrCache.Get(qrmsg.Id) | ||
122 | - if err != nil { | ||
123 | - log.Logger.Error(err.Error()) | ||
124 | - return nil, application.ThrowError(application.TRANSACTION_ERROR, "二维码已失效") | ||
125 | - } | ||
126 | - if !qrmsgCache.IsLogin { | 120 | + if !qrcodeMessage.IsLogin { |
127 | return failLoginData, nil | 121 | return failLoginData, nil |
128 | } | 122 | } |
123 | + | ||
129 | loginToken := domain.LoginToken{ | 124 | loginToken := domain.LoginToken{ |
130 | - UserId: qrmsgCache.UserId, | ||
131 | - UserBaseId: qrmsgCache.UserBaseId, | ||
132 | - Account: qrmsgCache.Account, | 125 | + UserId: qrcodeMessage.UserId, |
126 | + UserBaseId: qrcodeMessage.UserBaseId, | ||
127 | + Account: qrcodeMessage.Account, | ||
133 | Platform: domain.LoginPlatformWeb, | 128 | Platform: domain.LoginPlatformWeb, |
134 | - CompanyId: qrmsgCache.CompanyId, | ||
135 | - OrgId: qrmsgCache.OrgId, | ||
136 | - } | ||
137 | - // accessToken, err := loginToken.GenerateAccessToken() | ||
138 | - // if err != nil { | ||
139 | - // return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
140 | - // } | ||
141 | - qrCache.Remove(qrmsgCache.Id) | ||
142 | - // _ = accessToken | 129 | + CompanyId: qrcodeMessage.CompanyId, |
130 | + OrgId: qrcodeMessage.OrgId, | ||
131 | + } | ||
132 | + cache.Remove(queryParam.Key) | ||
143 | result, err := svr.getToken(loginToken) | 133 | result, err := svr.getToken(loginToken) |
144 | if err != nil { | 134 | if err != nil { |
145 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 135 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
146 | } | 136 | } |
137 | + | ||
147 | data := map[string]interface{}{ | 138 | data := map[string]interface{}{ |
148 | - "isLogin": qrmsgCache.IsLogin, | 139 | + "isLogin": qrcodeMessage.IsLogin, |
149 | "access": result["token"], | 140 | "access": result["token"], |
150 | } | 141 | } |
151 | return data, nil | 142 | return data, nil |
@@ -153,20 +144,15 @@ func (svr AuthService) AuthLoginQrcode(queryParam *query.QrcodeLoginStatusQuery) | @@ -153,20 +144,15 @@ func (svr AuthService) AuthLoginQrcode(queryParam *query.QrcodeLoginStatusQuery) | ||
153 | 144 | ||
154 | //AuthLoginQrcodeBind 扫码登录-绑定 | 145 | //AuthLoginQrcodeBind 扫码登录-绑定 |
155 | func (svr AuthService) AuthLoginQrcodeBinding(bindingCmd *command.QrcodeBindingCommand) (interface{}, error) { | 146 | func (svr AuthService) AuthLoginQrcodeBinding(bindingCmd *command.QrcodeBindingCommand) (interface{}, error) { |
156 | - qrmsg := domain.QrcodeMessage{} | ||
157 | - err := qrmsg.ParseToken(bindingCmd.Key) | ||
158 | - if err != nil { | ||
159 | - return nil, application.ThrowError(application.TRANSACTION_ERROR, "您扫描的二维码无效,请确认后重新扫描") | ||
160 | - } | ||
161 | qrCache := cache.LoginQrcodeCache{} | 147 | qrCache := cache.LoginQrcodeCache{} |
162 | - qrmsgCache, err := qrCache.Get(qrmsg.Id) | 148 | + qrcodeMessage, err := qrCache.Get(bindingCmd.Key) |
163 | if err != nil { | 149 | if err != nil { |
164 | return nil, application.ThrowError(application.TRANSACTION_ERROR, "您扫描的二维码无效,请确认后重新扫描") | 150 | return nil, application.ThrowError(application.TRANSACTION_ERROR, "您扫描的二维码无效,请确认后重新扫描") |
165 | } | 151 | } |
166 | - if err := qrmsgCache.BindUser(bindingCmd.Operator); err != nil { | 152 | + if err := qrcodeMessage.BindUser(bindingCmd.Operator); err != nil { |
167 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 153 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
168 | } | 154 | } |
169 | - if err := qrCache.Save(*qrmsgCache); err != nil { | 155 | + if err := qrCache.Save(*qrcodeMessage); err != nil { |
170 | log.Logger.Error(err.Error()) | 156 | log.Logger.Error(err.Error()) |
171 | return nil, application.ThrowError(application.TRANSACTION_ERROR, "登录失败,请重试") | 157 | return nil, application.ThrowError(application.TRANSACTION_ERROR, "登录失败,请重试") |
172 | } | 158 | } |
@@ -721,19 +707,18 @@ func (svr AuthService) GetCompanyOrgsByUser(queryParam *query.GetCompanyOrgsByUs | @@ -721,19 +707,18 @@ func (svr AuthService) GetCompanyOrgsByUser(queryParam *query.GetCompanyOrgsByUs | ||
721 | 707 | ||
722 | //GetQrcode 获取扫码登录需要的二维码 | 708 | //GetQrcode 获取扫码登录需要的二维码 |
723 | func (svr AuthService) GetQrcode() (interface{}, error) { | 709 | func (svr AuthService) GetQrcode() (interface{}, error) { |
724 | - qrmsg := domain.QrcodeMessage{} | ||
725 | - _, err := qrmsg.GenerateImageBase64() //imgBase64 | 710 | + qrcodeMessage := domain.QrcodeMessage{} |
711 | + _, err := qrcodeMessage.Init() //imgBase64 | ||
726 | if err != nil { | 712 | if err != nil { |
727 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 713 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
728 | } | 714 | } |
729 | qrCache := cache.LoginQrcodeCache{} | 715 | qrCache := cache.LoginQrcodeCache{} |
730 | - err = qrCache.Save(qrmsg) | 716 | + err = qrCache.Save(qrcodeMessage) |
731 | if err != nil { | 717 | if err != nil { |
732 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 718 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
733 | } | 719 | } |
734 | data := map[string]interface{}{ | 720 | data := map[string]interface{}{ |
735 | - //"image": imgBase64, | ||
736 | - "key": qrmsg.Token, | 721 | + "key": qrcodeMessage.Token, |
737 | } | 722 | } |
738 | return data, nil | 723 | return data, nil |
739 | } | 724 | } |
@@ -4,22 +4,22 @@ import ( | @@ -4,22 +4,22 @@ import ( | ||
4 | "encoding/base64" | 4 | "encoding/base64" |
5 | "fmt" | 5 | "fmt" |
6 | "github.com/forgoer/openssl" | 6 | "github.com/forgoer/openssl" |
7 | + "github.com/google/uuid" | ||
7 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/constant" | 8 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/constant" |
8 | - "time" | ||
9 | - | ||
10 | - jwt "github.com/dgrijalva/jwt-go" | 9 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/log" |
10 | + "strings" | ||
11 | ) | 11 | ) |
12 | 12 | ||
13 | const ( | 13 | const ( |
14 | qrcodeTokenSecret string = "bbe35ad433dd8e67" | 14 | qrcodeTokenSecret string = "bbe35ad433dd8e67" |
15 | - qrcodeCodeExpire int64 = 60 * 30 //15分钟过期 | 15 | + |
16 | + QrcodeCodeExpire int64 = 60 * 5 //5分钟过期 | ||
16 | ) | 17 | ) |
17 | 18 | ||
18 | var aecSecret = []byte("mmm.qrcode.ecb.1") | 19 | var aecSecret = []byte("mmm.qrcode.ecb.1") |
19 | var qrcodeLogin = "/v1/auth/login/qrcode?key=" | 20 | var qrcodeLogin = "/v1/auth/login/qrcode?key=" |
20 | 21 | ||
21 | type QrcodeMessage struct { | 22 | type QrcodeMessage struct { |
22 | - jwt.StandardClaims | ||
23 | Id string `json:"id"` | 23 | Id string `json:"id"` |
24 | Token string `json:"token"` | 24 | Token string `json:"token"` |
25 | IsLogin bool `json:"isLogin"` | 25 | IsLogin bool `json:"isLogin"` |
@@ -34,46 +34,20 @@ type QrcodeMessage struct { | @@ -34,46 +34,20 @@ type QrcodeMessage struct { | ||
34 | OrgId int64 `json:"orgId"` | 34 | OrgId int64 `json:"orgId"` |
35 | } | 35 | } |
36 | 36 | ||
37 | -func (qrmsg *QrcodeMessage) GenerateImageBase64() ([]byte, error) { | ||
38 | - nowTime := time.Now().Unix() | ||
39 | - qrmsg.StandardClaims = jwt.StandardClaims{ | ||
40 | - NotBefore: nowTime, | ||
41 | - IssuedAt: nowTime, | ||
42 | - ExpiresAt: nowTime + qrcodeCodeExpire, | ||
43 | - Issuer: "allied_creation_gateway", | ||
44 | - } | ||
45 | - qrmsg.Id = fmt.Sprintf("%d", time.Now().UnixNano()) | ||
46 | - token := jwt.NewWithClaims(jwt.SigningMethodHS256, *qrmsg) | ||
47 | - str, err := token.SignedString([]byte(qrcodeTokenSecret)) | ||
48 | - if err != nil { | ||
49 | - return nil, err | ||
50 | - } | 37 | +func (qrmsg *QrcodeMessage) Init() ([]byte, error) { |
38 | + str := strings.Replace(uuid.New().String(), "-", "", -1) | ||
51 | key := constant.ALLIED_CREATION_GATEWAY_HOST + qrcodeLogin + str | 39 | key := constant.ALLIED_CREATION_GATEWAY_HOST + qrcodeLogin + str |
40 | + log.Logger.Debug("key:" + key) | ||
52 | encryptedData, err := openssl.AesECBEncrypt([]byte(key), aecSecret, openssl.PKCS7_PADDING) | 41 | encryptedData, err := openssl.AesECBEncrypt([]byte(key), aecSecret, openssl.PKCS7_PADDING) |
53 | if err != nil { | 42 | if err != nil { |
54 | return nil, err | 43 | return nil, err |
55 | } | 44 | } |
45 | + qrmsg.Id = str | ||
56 | qrmsg.Token = base64.StdEncoding.EncodeToString(encryptedData) | 46 | qrmsg.Token = base64.StdEncoding.EncodeToString(encryptedData) |
57 | qrmsg.IsLogin = false | 47 | qrmsg.IsLogin = false |
58 | return encryptedData, err | 48 | return encryptedData, err |
59 | } | 49 | } |
60 | 50 | ||
61 | -func (qrmsg *QrcodeMessage) ParseToken(str string) error { | ||
62 | - tokenClaims, err := jwt.ParseWithClaims( | ||
63 | - str, | ||
64 | - qrmsg, | ||
65 | - func(token *jwt.Token) (interface{}, error) { | ||
66 | - return []byte(loginTokenSecret), nil | ||
67 | - }) | ||
68 | - if err != nil { | ||
69 | - return err | ||
70 | - } | ||
71 | - if claim, ok := tokenClaims.Claims.(*QrcodeMessage); ok && tokenClaims.Valid { | ||
72 | - *qrmsg = *claim | ||
73 | - } | ||
74 | - return nil | ||
75 | -} | ||
76 | - | ||
77 | func (qrmsg *QrcodeMessage) BindUser(operator Operator) error { | 51 | func (qrmsg *QrcodeMessage) BindUser(operator Operator) error { |
78 | if qrmsg.IsLogin { | 52 | if qrmsg.IsLogin { |
79 | return fmt.Errorf("登录中") | 53 | return fmt.Errorf("登录中") |
@@ -17,11 +17,7 @@ func (lq LoginQrcodeCache) keyString(str string) string { | @@ -17,11 +17,7 @@ func (lq LoginQrcodeCache) keyString(str string) string { | ||
17 | } | 17 | } |
18 | 18 | ||
19 | func (lq LoginQrcodeCache) Save(qrcode domain.QrcodeMessage) error { | 19 | func (lq LoginQrcodeCache) Save(qrcode domain.QrcodeMessage) error { |
20 | - nowTime := time.Now().Unix() | ||
21 | - exp := qrcode.ExpiresAt - nowTime | ||
22 | - if exp <= 0 { | ||
23 | - exp = 60 * 5 | ||
24 | - } | 20 | + var exp = domain.QrcodeCodeExpire |
25 | key := lq.keyString(qrcode.Id) | 21 | key := lq.keyString(qrcode.Id) |
26 | bt, _ := json.Marshal(qrcode) | 22 | bt, _ := json.Marshal(qrcode) |
27 | result := clientRedis.Set(key, string(bt), time.Duration(exp)*time.Second) | 23 | result := clientRedis.Set(key, string(bt), time.Duration(exp)*time.Second) |
-
请 注册 或 登录 后发表评论