作者 yangfu

扫码登录修改

@@ -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)