🔨 refactor code

This commit is contained in:
landaiqing
2024-10-03 02:10:14 +08:00
parent 230921fa3d
commit 16616e3755
17 changed files with 563 additions and 661 deletions

View File

@@ -166,72 +166,40 @@ func GetQQUserUserInfo(token *QQToken, openId string) (map[string]interface{}, e
// @Produce json
// @Router /controller/oauth/qq/callback [get]
func (OAuthController) QQCallback(c *gin.Context) {
var err error
// 获取 code
var code = c.Query("code")
code := c.Query("code")
if code == "" {
result.FailWithMessage(ginI18n.MustGetMessage(c, "ParamsError"), c)
return
}
// 通过 code, 获取 token
var tokenAuthUrl = GetQQTokenAuthUrl(code)
tokenChan := make(chan *QQToken)
errChan := make(chan error)
go func() {
token, err := GetQQToken(tokenAuthUrl)
if err != nil {
errChan <- err
return
}
tokenChan <- token
}()
var token *QQToken
select {
case token = <-tokenChan:
case err = <-errChan:
// 通过 code 获取 token
tokenAuthUrl := GetQQTokenAuthUrl(code)
token, err := GetQQToken(tokenAuthUrl)
if err != nil {
global.LOG.Error(err)
return
}
if token == nil {
global.LOG.Error(errors.New("failed to get token"))
return
}
// 通过 token 获取 openid
authQQme, err := GetQQUserOpenID(token)
if err != nil {
global.LOG.Error(err)
return
}
// 通过 token,获取 openid
openIDChan := make(chan *AuthQQme)
errChan = make(chan error)
go func() {
authQQme, err := GetQQUserOpenID(token)
if err != nil {
errChan <- err
return
}
openIDChan <- authQQme
}()
var authQQme *AuthQQme
select {
case authQQme = <-openIDChan:
case err = <-errChan:
global.LOG.Error(err)
return
}
// 通过token获取用户信息
userInfoChan := make(chan map[string]interface{})
errChan = make(chan error)
go func() {
userInfo, err := GetQQUserUserInfo(token, authQQme.OpenID)
if err != nil {
errChan <- err
return
}
userInfoChan <- userInfo
}()
var userInfo map[string]interface{}
select {
case userInfo = <-userInfoChan:
case err = <-errChan:
// 通过 token openid 获取用户信息
userInfo, err := GetQQUserUserInfo(token, authQQme.OpenID)
if err != nil {
global.LOG.Error(err)
return
}
// 处理用户信息
userInfoBytes, err := json.Marshal(userInfo)
if err != nil {
global.LOG.Error(err)
@@ -244,6 +212,7 @@ func (OAuthController) QQCallback(c *gin.Context) {
return
}
// 查询用户社交信息
userSocial, err := userSocialService.QueryUserSocialByOpenIDService(authQQme.OpenID, enum.OAuthSourceQQ)
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
db := global.DB
@@ -257,27 +226,29 @@ func (OAuthController) QQCallback(c *gin.Context) {
tx.Rollback()
}
}()
// 第一次登录,创建用户
uid := idgen.NextId()
uidStr := strconv.FormatInt(uid, 10)
user := model.ScaAuthUser{
UID: &uidStr,
Username: &authQQme.OpenID,
Nickname: &qqUserInfo.Nickname,
Avatar: &qqUserInfo.FigureurlQq1,
Gender: &qqUserInfo.Gender,
UID: uidStr,
Username: authQQme.OpenID,
Nickname: qqUserInfo.Nickname,
Avatar: qqUserInfo.FigureurlQq1,
Gender: qqUserInfo.Gender,
}
addUser, err := userService.AddUserService(user)
if err != nil {
addUser, wrong := userService.AddUserService(user)
if wrong != nil {
tx.Rollback()
global.LOG.Error(err)
global.LOG.Error(wrong)
return
}
qq := enum.OAuthSourceQQ
userSocial = model.ScaAuthUserSocial{
UserID: &uidStr,
OpenID: &authQQme.OpenID,
Source: &qq,
UserID: uidStr,
OpenID: authQQme.OpenID,
Source: qq,
}
err = userSocialService.AddUserSocialService(userSocial)
if err != nil {
@@ -285,20 +256,22 @@ func (OAuthController) QQCallback(c *gin.Context) {
global.LOG.Error(err)
return
}
_, err = global.Casbin.AddRoleForUser(uidStr, enum.User)
if err != nil {
tx.Rollback()
global.LOG.Error(err)
return
}
if err := tx.Commit().Error; err != nil {
if err = tx.Commit().Error; err != nil {
tx.Rollback()
global.LOG.Error(err)
return
}
HandleLoginResponse(c, *addUser.UID)
HandleLoginResponse(c, addUser.UID)
return
} else {
HandleLoginResponse(c, *userSocial.UserID)
HandleLoginResponse(c, userSocial.UserID)
}
}