github回调信息完成

This commit is contained in:
junleea 2025-04-27 10:35:41 +08:00
parent cf37fac963
commit ba553984e4
2 changed files with 33 additions and 10 deletions

View File

@ -238,6 +238,17 @@ func CreateThirdPartyUserInfo(userID, thirdPartyID int, thirdPartyPlatform, thir
} }
return thirdPartyUserInfo.ID 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 { func DeleteThirdPartyUserInfoByID(id int) int {

View File

@ -215,29 +215,31 @@ func DoGithubCallBack(state *proto.ThirdPartyLoginState, code string) {
log.Println("get github access token is empty") log.Println("get github access token is empty")
return return
} }
log.Println("get github access token:", resp.AccessToken)
//获取用户信息 //获取用户信息
userInfo, err := worker.GetGitHubUserInfo(resp.AccessToken) userInfo, err := worker.GetGitHubUserInfo(resp.AccessToken)
if err != nil { if err != nil {
log.Println("get github user info error:", err) log.Println("get github user info error:", err)
return return
} }
log.Println("get github user info:", userInfo)
var thirdPartyLoginStatus proto.ThirdPartyLoginStatus var thirdPartyLoginStatus proto.ThirdPartyLoginStatus
thirdPartyLoginStatus.Type = state.Platform thirdPartyLoginStatus.Type = state.Platform
if state.Type == "login" { if state.Type == "login" {
//根据第三方平台查找用户 //根据第三方平台查找用户
thirdPartyUserInfoList := dao.FindThirdPartyUserInfoByThirdPartyID(userInfo.UserID) thirdPartyUserInfoList := dao.FindThirdPartyUserInfoByThirdPartyID(userInfo.UserID)
if thirdPartyUserInfoList == nil || len(thirdPartyUserInfoList) == 0 { if thirdPartyUserInfoList == nil || len(thirdPartyUserInfoList) == 0 {
thirdPartyLoginStatus.Status = 2 //未绑定用户 thirdPartyLoginStatus.Status = proto.ThirdPartyUserNotBinded //未绑定用户
} else { } else {
thirdPartyUserInfo := thirdPartyUserInfoList[0] thirdPartyUserInfo := thirdPartyUserInfoList[0]
//获取用户信息 //获取用户信息
user := GetUserByIDWithCache(thirdPartyUserInfo.UserID) user := GetUserByIDWithCache(thirdPartyUserInfo.UserID)
if user.ID == 0 { if user.ID == 0 {
thirdPartyLoginStatus.Status = 2 thirdPartyLoginStatus.Status = proto.ThirdPartyUserNotBinded
log.Println("get user by id error") log.Println("get user by id error")
} else { } else {
//成功 //成功
thirdPartyLoginStatus.Status = 0 thirdPartyLoginStatus.Status = proto.SuccessCode
thirdPartyLoginStatus.UserInfo.UserID = int(user.ID) thirdPartyLoginStatus.UserInfo.UserID = int(user.ID)
thirdPartyLoginStatus.UserInfo.Username = user.Name thirdPartyLoginStatus.UserInfo.Username = user.Name
thirdPartyLoginStatus.UserInfo.Email = user.Email thirdPartyLoginStatus.UserInfo.Email = user.Email
@ -260,23 +262,33 @@ func DoGithubCallBack(state *proto.ThirdPartyLoginState, code string) {
//根据用户ID获取用户信息 //根据用户ID获取用户信息
user := GetUserByIDWithCache(userID) user := GetUserByIDWithCache(userID)
if user.ID == 0 { if user.ID == 0 {
thirdPartyLoginStatus.Status = 2 //未绑定用户 thirdPartyLoginStatus.Status = 4 //添加用户信息错误
log.Println("get user by id error") log.Println("get user by id error")
} else { } else {
//成功 //需要创建数据库记录
thirdPartyLoginStatus.Status = 0 data := dao.ThirdPartyUserInfo{UserID: userID, ThirdPartyID: userInfo.UserID, ThirdPartyPlatform: state.Platform, ThirdPartyUserAvatar: userInfo.AvatarUrl, ThirdPartyUserName: userInfo.LoginUserName, ThirdPartyUserUrl: userInfo.Url}
thirdPartyLoginStatus.UserInfo.UserID = int(user.ID) uid := dao.CreateThirdPartyUserInfoV2(&data)
thirdPartyLoginStatus.UserInfo.Username = user.Name if uid == 0 {
thirdPartyLoginStatus.UserInfo.Email = user.Email log.Println("create third party user info error")
thirdPartyLoginStatus.UserInfo.Token, _ = GenerateJWTToken(int(user.ID), user.Name) 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 { } else {
log.Println("DoGithubCallBack state type error:", state.Type) log.Println("DoGithubCallBack state type error:", state.Type)
thirdPartyLoginStatus.Status = proto.ParameterError //参数错误
} }
//更新redis中的第三方登录状态 //更新redis中的第三方登录状态
thirdPartyLoginStatusStr, _ := json.Marshal(thirdPartyLoginStatus) 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) worker.SetRedisWithExpire(state.UUID, string(thirdPartyLoginStatusStr), time.Minute*10)
} }