🎨 update
This commit is contained in:
@@ -3,16 +3,19 @@ package oauth_controller
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"schisandra-cloud-album/common/constant"
|
||||
"schisandra-cloud-album/common/redis"
|
||||
"schisandra-cloud-album/common/result"
|
||||
"schisandra-cloud-album/common/types"
|
||||
"schisandra-cloud-album/global"
|
||||
"schisandra-cloud-album/service/impl"
|
||||
"schisandra-cloud-album/utils"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
type OAuthController struct{}
|
||||
@@ -36,7 +39,6 @@ func HandleLoginResponse(c *gin.Context, uid string) {
|
||||
user := userService.QueryUserByUuidService(&uid)
|
||||
|
||||
var accessToken, refreshToken string
|
||||
var expiresAt int64
|
||||
var err error
|
||||
var wg sync.WaitGroup
|
||||
var accessTokenErr error
|
||||
@@ -52,7 +54,7 @@ func HandleLoginResponse(c *gin.Context, uid string) {
|
||||
// 使用goroutine生成refreshToken
|
||||
go func() {
|
||||
defer wg.Done() // 完成时减少计数器
|
||||
refreshToken, expiresAt = utils.GenerateRefreshToken(utils.RefreshJWTPayload{UserID: &uid}, time.Hour*24*7)
|
||||
refreshToken = utils.GenerateRefreshToken(utils.RefreshJWTPayload{UserID: &uid}, time.Hour*24*7)
|
||||
}()
|
||||
|
||||
// 等待两个协程完成
|
||||
@@ -64,29 +66,28 @@ func HandleLoginResponse(c *gin.Context, uid string) {
|
||||
return
|
||||
}
|
||||
|
||||
data := ResponseData{
|
||||
AccessToken: accessToken,
|
||||
RefreshToken: refreshToken,
|
||||
ExpiresAt: expiresAt,
|
||||
UID: &uid,
|
||||
UserInfo: UserInfo{
|
||||
Username: user.Username,
|
||||
Nickname: user.Nickname,
|
||||
Avatar: user.Avatar,
|
||||
Email: user.Email,
|
||||
Phone: user.Phone,
|
||||
Gender: user.Gender,
|
||||
Status: user.Status,
|
||||
CreateAt: *user.CreatedTime,
|
||||
},
|
||||
data := types.ResponseData{
|
||||
AccessToken: accessToken,
|
||||
UID: &uid,
|
||||
Username: user.Username,
|
||||
Nickname: user.Nickname,
|
||||
Avatar: user.Avatar,
|
||||
Status: user.Status,
|
||||
}
|
||||
|
||||
if err = utils.SetSession(c, constant.SessionKey, data); err != nil {
|
||||
// 设置session
|
||||
sessionData := utils.SessionData{
|
||||
RefreshToken: refreshToken,
|
||||
UID: uid,
|
||||
}
|
||||
if err = utils.SetSession(c, constant.SessionKey, sessionData); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
redisTokenData := types.RedisToken{
|
||||
AccessToken: accessToken,
|
||||
UID: uid,
|
||||
}
|
||||
// 将数据存入redis
|
||||
if err = redis.Set(constant.UserLoginTokenRedisKey+uid, data, time.Hour*24*7).Err(); err != nil {
|
||||
if err = redis.Set(constant.UserLoginTokenRedisKey+uid, redisTokenData, time.Hour*24*7).Err(); err != nil {
|
||||
global.LOG.Error(err)
|
||||
return
|
||||
}
|
||||
|
@@ -1,33 +0,0 @@
|
||||
package oauth_controller
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
)
|
||||
|
||||
// ResponseData 返回数据
|
||||
type ResponseData struct {
|
||||
AccessToken string `json:"access_token"`
|
||||
RefreshToken string `json:"refresh_token"`
|
||||
ExpiresAt int64 `json:"expires_at"`
|
||||
UID *string `json:"uid"`
|
||||
UserInfo UserInfo `json:"user_info"`
|
||||
}
|
||||
type UserInfo struct {
|
||||
Username string `json:"username,omitempty"`
|
||||
Nickname string `json:"nickname"`
|
||||
Avatar string `json:"avatar"`
|
||||
Phone string `json:"phone,omitempty"`
|
||||
Email string `json:"email,omitempty"`
|
||||
Gender string `json:"gender"`
|
||||
Status int64 `json:"status"`
|
||||
CreateAt time.Time `json:"create_at"`
|
||||
}
|
||||
|
||||
func (res ResponseData) MarshalBinary() ([]byte, error) {
|
||||
return json.Marshal(res)
|
||||
}
|
||||
|
||||
func (res ResponseData) UnmarshalBinary(data []byte) error {
|
||||
return json.Unmarshal(data, &res)
|
||||
}
|
@@ -1,9 +1,12 @@
|
||||
package oauth_controller
|
||||
|
||||
import (
|
||||
"encoding/gob"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/ArtisanCloud/PowerLibs/v3/http/helper"
|
||||
"github.com/ArtisanCloud/PowerWeChat/v3/src/basicService/qrCode/response"
|
||||
"github.com/ArtisanCloud/PowerWeChat/v3/src/kernel/contract"
|
||||
@@ -14,18 +17,17 @@ import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/yitter/idgenerator-go/idgen"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"schisandra-cloud-album/common/constant"
|
||||
"schisandra-cloud-album/common/enum"
|
||||
"schisandra-cloud-album/common/randomname"
|
||||
"schisandra-cloud-album/common/redis"
|
||||
"schisandra-cloud-album/common/result"
|
||||
"schisandra-cloud-album/common/types"
|
||||
"schisandra-cloud-album/controller/websocket_controller/qr_ws_controller"
|
||||
"schisandra-cloud-album/global"
|
||||
"schisandra-cloud-album/model"
|
||||
"schisandra-cloud-album/utils"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// CallbackNotify 微信回调
|
||||
@@ -246,24 +248,20 @@ func handelUserLogin(userId string, clientId string, c *gin.Context) bool {
|
||||
resultChan <- false
|
||||
return
|
||||
}
|
||||
refreshToken, expiresAt := utils.GenerateRefreshToken(utils.RefreshJWTPayload{UserID: &userId}, time.Hour*24*7)
|
||||
data := ResponseData{
|
||||
AccessToken: accessToken,
|
||||
RefreshToken: refreshToken,
|
||||
ExpiresAt: expiresAt,
|
||||
UID: &userId,
|
||||
UserInfo: UserInfo{
|
||||
Username: user.Username,
|
||||
Nickname: user.Nickname,
|
||||
Avatar: user.Avatar,
|
||||
Gender: user.Gender,
|
||||
Phone: user.Phone,
|
||||
Email: user.Email,
|
||||
CreateAt: *user.CreatedTime,
|
||||
Status: user.Status,
|
||||
},
|
||||
refreshToken := utils.GenerateRefreshToken(utils.RefreshJWTPayload{UserID: &userId}, time.Hour*24*7)
|
||||
data := types.ResponseData{
|
||||
AccessToken: accessToken,
|
||||
UID: &userId,
|
||||
Username: user.Username,
|
||||
Nickname: user.Nickname,
|
||||
Avatar: user.Avatar,
|
||||
Status: user.Status,
|
||||
}
|
||||
fail := redis.Set(constant.UserLoginTokenRedisKey+userId, data, time.Hour*24*7).Err()
|
||||
redisTokenData := types.RedisToken{
|
||||
AccessToken: accessToken,
|
||||
UID: userId,
|
||||
}
|
||||
fail := redis.Set(constant.UserLoginTokenRedisKey+userId, redisTokenData, time.Hour*24*7).Err()
|
||||
if fail != nil {
|
||||
resultChan <- false
|
||||
return
|
||||
@@ -279,8 +277,11 @@ func handelUserLogin(userId string, clientId string, c *gin.Context) bool {
|
||||
resultChan <- false
|
||||
return
|
||||
}
|
||||
gob.Register(ResponseData{})
|
||||
wrong := utils.SetSession(c, constant.SessionKey, data)
|
||||
sessionData := utils.SessionData{
|
||||
RefreshToken: refreshToken,
|
||||
UID: userId,
|
||||
}
|
||||
wrong := utils.SetSession(c, constant.SessionKey, sessionData)
|
||||
if wrong != nil {
|
||||
resultChan <- false
|
||||
return
|
||||
|
Reference in New Issue
Block a user