diff --git a/idp/dingtalk.go b/idp/dingtalk.go index d17e69fc..297f78d4 100644 --- a/idp/dingtalk.go +++ b/idp/dingtalk.go @@ -121,6 +121,7 @@ func (idp *DingTalkIdProvider) GetToken(code string) (*oauth2.Token, error) { type DingTalkUserResponse struct { Nick string `json:"nick"` OpenId string `json:"openId"` + UnionId string `json:"unionId"` AvatarUrl string `json:"avatarUrl"` Email string `json:"email"` Errmsg string `json:"message"` @@ -162,6 +163,7 @@ func (idp *DingTalkIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, erro Id: dtUserInfo.OpenId, Username: dtUserInfo.Nick, DisplayName: dtUserInfo.Nick, + UnionId: dtUserInfo.UnionId, Email: dtUserInfo.Email, AvatarUrl: dtUserInfo.AvatarUrl, } diff --git a/idp/provider.go b/idp/provider.go index 55838a2a..d50e39ba 100644 --- a/idp/provider.go +++ b/idp/provider.go @@ -25,6 +25,7 @@ type UserInfo struct { Id string Username string DisplayName string + UnionId string Email string AvatarUrl string } diff --git a/object/user_util.go b/object/user_util.go index 3dcc3c0f..6a34149c 100644 --- a/object/user_util.go +++ b/object/user_util.go @@ -137,6 +137,15 @@ func SetUserOAuthProperties(organization *Organization, user *User, providerType user.Email = userInfo.Email } } + + if userInfo.UnionId != "" { + propertyName := fmt.Sprintf("oauth_%s_unionId", providerType) + setUserProperty(user, propertyName, userInfo.UnionId) + if providerType == "DingTalk" && user.DingTalk == "" { + user.DingTalk = userInfo.UnionId + } + } + if userInfo.AvatarUrl != "" { propertyName := fmt.Sprintf("oauth_%s_avatarUrl", providerType) setUserProperty(user, propertyName, userInfo.AvatarUrl)