Add jobNumber to dingtalk provider

This commit is contained in:
Yang Luo 2023-04-29 21:28:55 +08:00
parent 7e4562efe1
commit b32a772a77

View File

@ -179,9 +179,15 @@ func (idp *DingTalkIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, erro
return nil, err return nil, err
} }
corpEmail, err := idp.getUserCorpEmail(userId, corpAccessToken) corpEmail, jobNumber, err := idp.getUserCorpEmail(userId, corpAccessToken)
if err == nil && corpEmail != "" { if err == nil {
userInfo.Email = corpEmail if corpEmail != "" {
userInfo.Email = corpEmail
}
if jobNumber != "" {
userInfo.Username = jobNumber
}
} }
return &userInfo, nil return &userInfo, nil
@ -251,33 +257,34 @@ func (idp *DingTalkIdProvider) getUserId(unionId string, accessToken string) (st
return "", err return "", err
} }
if data.ErrCode == 60121 { if data.ErrCode == 60121 {
return "", fmt.Errorf("the user is not found in the organization where clientId and clientSecret belong") return "", fmt.Errorf("该应用只允许本企业内部用户登录,您不属于该企业,无法登录")
} else if data.ErrCode != 0 { } else if data.ErrCode != 0 {
return "", fmt.Errorf(data.ErrMessage) return "", fmt.Errorf(data.ErrMessage)
} }
return data.Result.UserId, nil return data.Result.UserId, nil
} }
func (idp *DingTalkIdProvider) getUserCorpEmail(userId string, accessToken string) (string, error) { func (idp *DingTalkIdProvider) getUserCorpEmail(userId string, accessToken string) (string, string, error) {
body := make(map[string]string) body := make(map[string]string)
body["userid"] = userId body["userid"] = userId
respBytes, err := idp.postWithBody(body, "https://oapi.dingtalk.com/topapi/v2/user/get?access_token="+accessToken) respBytes, err := idp.postWithBody(body, "https://oapi.dingtalk.com/topapi/v2/user/get?access_token="+accessToken)
if err != nil { if err != nil {
return "", err return "", "", err
} }
var data struct { var data struct {
ErrMessage string `json:"errmsg"` ErrMessage string `json:"errmsg"`
Result struct { Result struct {
Email string `json:"email"` Email string `json:"email"`
JobNumber string `json:"job_number"`
} `json:"result"` } `json:"result"`
} }
err = json.Unmarshal(respBytes, &data) err = json.Unmarshal(respBytes, &data)
if err != nil { if err != nil {
return "", err return "", "", err
} }
if data.ErrMessage != "ok" { if data.ErrMessage != "ok" {
return "", fmt.Errorf(data.ErrMessage) return "", "", fmt.Errorf(data.ErrMessage)
} }
return data.Result.Email, nil return data.Result.Email, data.Result.JobNumber, nil
} }