From ba553984e4713461e14ec5c2b9f764822f25388f Mon Sep 17 00:00:00 2001 From: junleea <354425203@qq.com> Date: Sun, 27 Apr 2025 10:35:41 +0800 Subject: [PATCH] =?UTF-8?q?github=E5=9B=9E=E8=B0=83=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dao/user.go | 11 +++++++++++ service/toolService.go | 32 ++++++++++++++++++++++---------- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/dao/user.go b/dao/user.go index 8576b18..c1e77fa 100644 --- a/dao/user.go +++ b/dao/user.go @@ -238,6 +238,17 @@ func CreateThirdPartyUserInfo(userID, thirdPartyID int, thirdPartyPlatform, thir } return thirdPartyUserInfo.ID } +func CreateThirdPartyUserInfoV2(thirdPartyUserInfo *ThirdPartyUserInfo) uint { + db2 := DB + if proto.Config.SERVER_SQL_LOG { + db2 = DB.Debug() + } + res := db2.Create(thirdPartyUserInfo) + if res.Error != nil { + return 0 + } + return thirdPartyUserInfo.ID +} // 删除 func DeleteThirdPartyUserInfoByID(id int) int { diff --git a/service/toolService.go b/service/toolService.go index f4c0136..2cdd476 100644 --- a/service/toolService.go +++ b/service/toolService.go @@ -215,29 +215,31 @@ func DoGithubCallBack(state *proto.ThirdPartyLoginState, code string) { log.Println("get github access token is empty") return } + log.Println("get github access token:", resp.AccessToken) //获取用户信息 userInfo, err := worker.GetGitHubUserInfo(resp.AccessToken) if err != nil { log.Println("get github user info error:", err) return } + log.Println("get github user info:", userInfo) var thirdPartyLoginStatus proto.ThirdPartyLoginStatus thirdPartyLoginStatus.Type = state.Platform if state.Type == "login" { //根据第三方平台查找用户 thirdPartyUserInfoList := dao.FindThirdPartyUserInfoByThirdPartyID(userInfo.UserID) if thirdPartyUserInfoList == nil || len(thirdPartyUserInfoList) == 0 { - thirdPartyLoginStatus.Status = 2 //未绑定用户 + thirdPartyLoginStatus.Status = proto.ThirdPartyUserNotBinded //未绑定用户 } else { thirdPartyUserInfo := thirdPartyUserInfoList[0] //获取用户信息 user := GetUserByIDWithCache(thirdPartyUserInfo.UserID) if user.ID == 0 { - thirdPartyLoginStatus.Status = 2 + thirdPartyLoginStatus.Status = proto.ThirdPartyUserNotBinded log.Println("get user by id error") } else { //成功 - thirdPartyLoginStatus.Status = 0 + thirdPartyLoginStatus.Status = proto.SuccessCode thirdPartyLoginStatus.UserInfo.UserID = int(user.ID) thirdPartyLoginStatus.UserInfo.Username = user.Name thirdPartyLoginStatus.UserInfo.Email = user.Email @@ -260,23 +262,33 @@ func DoGithubCallBack(state *proto.ThirdPartyLoginState, code string) { //根据用户ID获取用户信息 user := GetUserByIDWithCache(userID) if user.ID == 0 { - thirdPartyLoginStatus.Status = 2 //未绑定用户 + thirdPartyLoginStatus.Status = 4 //添加用户信息错误 log.Println("get user by id error") } else { - //成功 - thirdPartyLoginStatus.Status = 0 - thirdPartyLoginStatus.UserInfo.UserID = int(user.ID) - thirdPartyLoginStatus.UserInfo.Username = user.Name - thirdPartyLoginStatus.UserInfo.Email = user.Email - thirdPartyLoginStatus.UserInfo.Token, _ = GenerateJWTToken(int(user.ID), user.Name) + //需要创建数据库记录 + data := dao.ThirdPartyUserInfo{UserID: userID, ThirdPartyID: userInfo.UserID, ThirdPartyPlatform: state.Platform, ThirdPartyUserAvatar: userInfo.AvatarUrl, ThirdPartyUserName: userInfo.LoginUserName, ThirdPartyUserUrl: userInfo.Url} + uid := dao.CreateThirdPartyUserInfoV2(&data) + if uid == 0 { + log.Println("create third party user info error") + thirdPartyLoginStatus.Status = proto.OperationFailed //操作错误 + } else { + //成功 + thirdPartyLoginStatus.Status = proto.SuccessCode + thirdPartyLoginStatus.UserInfo.UserID = int(user.ID) + thirdPartyLoginStatus.UserInfo.Username = user.Name + thirdPartyLoginStatus.UserInfo.Email = user.Email + thirdPartyLoginStatus.UserInfo.Token, _ = GenerateJWTToken(int(user.ID), user.Name) + } } } } } else { log.Println("DoGithubCallBack state type error:", state.Type) + thirdPartyLoginStatus.Status = proto.ParameterError //参数错误 } //更新redis中的第三方登录状态 thirdPartyLoginStatusStr, _ := json.Marshal(thirdPartyLoginStatus) + log.Println("do handle github callback success, third party login status:", string(thirdPartyLoginStatusStr)) worker.SetRedisWithExpire(state.UUID, string(thirdPartyLoginStatusStr), time.Minute*10) }