Quellcode durchsuchen

fix: 重复账号清除token

hsun vor 11 Monaten
Ursprung
Commit
24b9e708c9

+ 11 - 0
models/tables/rddp/session/update.go

@@ -1,6 +1,7 @@
 package session
 
 import (
+	"fmt"
 	"time"
 )
 
@@ -18,3 +19,13 @@ func (session *Session) UpdateSession(userId int64, expireTime time.Time) (err e
 	err = session.Update(updateCols)
 	return
 }
+
+// ClearRepeatBindAccountToken 清除重复绑定账号的token
+func ClearRepeatBindAccountToken(openIds []string) (err error) {
+	if len(openIds) == 0 {
+		return
+	}
+	sql := fmt.Sprintf(` DELETE FROM session WHERE open_id IN ? AND expire_time >= NOW() `)
+	err = getDb().Exec(sql, openIds).Error
+	return
+}

+ 3 - 3
models/tables/user_record/query.go

@@ -32,9 +32,9 @@ func GetFirstByUnionID(unionID string) (item *UserRecord, err error) {
 	return
 }
 
-// GetRepeatBindAccountNum 获取重复的绑定账号
-func GetRepeatBindAccountNum(account string, source int) (num int64, err error) {
-	err = global.DEFAULT_MYSQL.Model(UserRecord{}).Where("bind_account = ? AND create_platform = ?", account, source).Count(&num).Error
+// GetRepeatBindAccount 获取重复的绑定账号
+func GetRepeatBindAccount(account string, source int) (items []*UserRecord, err error) {
+	err = global.DEFAULT_MYSQL.Model(UserRecord{}).Where("bind_account = ? AND create_platform = ?", account, source).Find(&items).Error
 	return
 }
 

+ 13 - 2
services/user/user_bind.go

@@ -222,18 +222,29 @@ func bindWxUser(openid, mobile, email string, areaNum, registerPlatform int) (us
 	// 未绑定
 	if userRecord.UserID == 0 {
 		// 校验该手机号/邮箱是否已绑定过微信, 若已绑定过则所有微信均进行解绑, 仅绑定当前微信
-		count, e := user_record.GetRepeatBindAccountNum(bindAccount, utils.USER_RECORD_CREATE_PLATFORM)
+		repeats, e := user_record.GetRepeatBindAccount(bindAccount, utils.USER_RECORD_CREATE_PLATFORM)
 		if e != nil {
 			err = fmt.Errorf("获取重复的绑定账号数失败, err: %s", e.Error())
 			errMsg = "绑定异常"
 			return
 		}
-		if count > 0 {
+		if len(repeats) > 0 {
+			// 清除绑定关系
 			if e = user_record.ClearRepeatBindAccount(bindAccount, utils.USER_RECORD_CREATE_PLATFORM); e != nil {
 				err = fmt.Errorf("重置重复的绑定账号失败, err: %s", e.Error())
 				errMsg = "绑定异常"
 				return
 			}
+			// 清除重复账号的session
+			repeatOpenIds := make([]string, 0)
+			for _, v := range repeats {
+				repeatOpenIds = append(repeatOpenIds, v.OpenID)
+			}
+			if e = session.ClearRepeatBindAccountToken(repeatOpenIds); e != nil {
+				err = fmt.Errorf("清除重复绑定账号Token失败, err: %v", e)
+				errMsg = "绑定异常"
+				return
+			}
 		}
 
 		userRecord.BindAccount = bindAccount