Browse Source

fix:象屿单点登录

Roc 1 year ago
parent
commit
2e3ac5b515
4 changed files with 67 additions and 13 deletions
  1. 1 1
      latest_filelog
  2. 19 1
      logic/xiangyu/auth.go
  3. 36 0
      models/eta/sys_third_session.go
  4. 11 11
      services/session.go

+ 1 - 1
latest_filelog

@@ -1 +1 @@
-log/filelog/2024-01-30-00-00.log
+log/filelog/2024-02-05-00-00.log

+ 19 - 1
logic/xiangyu/auth.go

@@ -6,6 +6,7 @@ import (
 	"eta/eta_bridge/services"
 	"eta/eta_bridge/services/xiangyu"
 	"fmt"
+	"time"
 )
 
 // LoginEta
@@ -30,7 +31,24 @@ func LoginEta(code string) (resp response.LoginResp, err error, errMsg string) {
 	}
 
 	// 生成登录session
-	resp, err, errMsg = services.CreateEtaSession(adminInfo)
+	resp, session, err, errMsg := services.CreateEtaSession(adminInfo)
+	if err != nil {
+		return
+	}
+
+	// 记录两方session的绑定信息
+	thirdSession := &eta.SysThirdSession{
+		ID:                0,
+		SysUserID:         uint64(session.SysUserId),
+		UserName:          session.UserName,
+		AccessToken:       session.AccessToken,
+		ThirdAccessToken:  tokenResp.AccessToken,
+		ThirdRefreshToken: tokenResp.RefreshToken,
+		ThirdExpiredTime:  time.Now().Add(time.Duration(tokenResp.ExpiresIn) * time.Second),
+		CreatedTime:       time.Now(),
+		LastUpdatedTime:   time.Now(),
+	}
+	eta.AddSysThirdSession(thirdSession)
 
 	return
 }

+ 36 - 0
models/eta/sys_third_session.go

@@ -0,0 +1,36 @@
+package eta
+
+import (
+	"eta/eta_bridge/global"
+	"time"
+)
+
+// SysThirdSession
+// @Description: 第三方登录会话session
+type SysThirdSession struct {
+	ID                uint64    `gorm:"primaryKey;column:id"`
+	SysUserID         uint64    `gorm:"column:sys_user_id"`
+	UserName          string    `gorm:"column:user_name"`
+	AccessToken       string    `gorm:"index:access_token;column:access_token"`
+	ThirdAccessToken  string    `gorm:"index:third_access_token;column:third_access_token"`
+	ThirdRefreshToken string    `gorm:"column:third_refresh_token"`
+	ThirdExpiredTime  time.Time `gorm:"column:third_expired_time"`
+	CreatedTime       time.Time `gorm:"index:created_time;column:created_time"`
+	LastUpdatedTime   time.Time `gorm:"index:last_updated_time;column:last_updated_time"`
+}
+
+func (m *SysThirdSession) TableName() string {
+	return "sys_third_session"
+}
+
+// AddSysThirdSession 新增第三方的session
+func AddSysThirdSession(item *SysThirdSession) (err error) {
+	err = global.MYSQL["hz_eta"].Create(item).Error
+	return
+}
+
+// GetSysThirdSessionByToken 根据Token获取第三方session
+func GetSysThirdSessionByToken(token string) (item *SysThirdSession, err error) {
+	err = global.MYSQL["hz_eta"].Where("access_token = ? AND expired_time > NOW()", token).Order("expired_time DESC").First(&item).Error
+	return
+}

+ 11 - 11
services/session.go

@@ -16,7 +16,7 @@ import (
 // @return login *response.LoginResp
 // @return err error
 // @return errMsg string
-func CreateEtaSession(sysUser *eta.Admin) (login response.LoginResp, err error, errMsg string) {
+func CreateEtaSession(sysUser *eta.Admin) (login response.LoginResp, session *eta.SysSession, err error, errMsg string) {
 	errMsg = `登录失败`
 	login = response.LoginResp{}
 
@@ -24,20 +24,20 @@ func CreateEtaSession(sysUser *eta.Admin) (login response.LoginResp, err error,
 	account := utils.MD5(sysUser.AdminName)
 	// 获取用户未过期的session, 避免过于频繁生成token
 	expired := time.Now().AddDate(0, 0, 1).Format(utils.FormatDateTime)
-	session, _ := eta.GetUserUnexpiredSysSession(sysUser.AdminName, expired)
+	session, _ = eta.GetUserUnexpiredSysSession(sysUser.AdminName, expired)
 	if session != nil && session.AccessToken != "" {
 		token = session.AccessToken
 	} else {
 		token = utils.GenToken(account)
-		sysSession := new(eta.SysSession)
-		sysSession.UserName = sysUser.AdminName
-		sysSession.SysUserId = sysUser.AdminId
-		sysSession.ExpiredTime = time.Now().AddDate(0, 0, 90)
-		sysSession.IsRemember = 1
-		sysSession.CreatedTime = time.Now()
-		sysSession.LastUpdatedTime = time.Now()
-		sysSession.AccessToken = token
-		if e := eta.AddSysSession(sysSession); e != nil {
+		session = new(eta.SysSession)
+		session.UserName = sysUser.AdminName
+		session.SysUserId = sysUser.AdminId
+		session.ExpiredTime = time.Now().AddDate(0, 0, 90)
+		session.IsRemember = 1
+		session.CreatedTime = time.Now()
+		session.LastUpdatedTime = time.Now()
+		session.AccessToken = token
+		if e := eta.AddSysSession(session); e != nil {
 			errMsg = "新增session失败, err: "
 			err = errors.New("新增session失败, err: " + e.Error())
 			return