50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package client_controller
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/ccpwcn/kgo"
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"schisandra-cloud-album/common/constant"
|
|
"schisandra-cloud-album/common/redis"
|
|
"schisandra-cloud-album/common/result"
|
|
"schisandra-cloud-album/global"
|
|
"schisandra-cloud-album/utils"
|
|
)
|
|
|
|
type ClientController struct{}
|
|
|
|
var mu sync.Mutex
|
|
|
|
// GenerateClientId 生成客户端ID
|
|
// @Summary 生成客户端ID
|
|
// @Description 生成客户端ID
|
|
// @Tags 微信公众号
|
|
// @Produce json
|
|
// @Router /controller/oauth/generate_client_id [get]
|
|
func (ClientController) GenerateClientId(c *gin.Context) {
|
|
// 获取客户端IP
|
|
ip := utils.GetClientIP(c)
|
|
// 加锁
|
|
mu.Lock()
|
|
defer mu.Unlock()
|
|
|
|
// 从Redis获取客户端ID
|
|
clientId := redis.Get(constant.UserLoginClientRedisKey + ip).Val()
|
|
if clientId != "" {
|
|
result.OkWithData(clientId, c)
|
|
return
|
|
}
|
|
// 生成新的客户端ID
|
|
simpleUuid := kgo.SimpleUuid()
|
|
err := redis.Set(constant.UserLoginClientRedisKey+ip, simpleUuid, time.Hour*24*7).Err()
|
|
if err != nil {
|
|
global.LOG.Error(err)
|
|
return
|
|
}
|
|
result.OkWithData(simpleUuid, c)
|
|
return
|
|
}
|