diff --git a/controllers/auth.go b/controllers/auth.go index 6bae47d4..4918f99b 100644 --- a/controllers/auth.go +++ b/controllers/auth.go @@ -28,6 +28,7 @@ import ( "github.com/casdoor/casdoor/object" "github.com/casdoor/casdoor/proxy" "github.com/casdoor/casdoor/util" + "github.com/google/uuid" ) func codeToResponse(code *object.Code) *Response { @@ -252,7 +253,7 @@ func (c *ApiController) Login() { record := object.NewRecord(c.Ctx) record.Organization = application.Organization record.User = user.Name - util.SafeGoroutine(func() {object.AddRecord(record)}) + util.SafeGoroutine(func() { object.AddRecord(record) }) } } else if form.Provider != "" { application := object.GetApplication(fmt.Sprintf("admin/%s", form.Application)) @@ -345,7 +346,7 @@ func (c *ApiController) Login() { record := object.NewRecord(c.Ctx) record.Organization = application.Organization record.User = user.Name - util.SafeGoroutine(func() {object.AddRecord(record)}) + util.SafeGoroutine(func() { object.AddRecord(record) }) } else if provider.Category == "OAuth" { // Sign up via OAuth if !application.EnableSignUp { @@ -358,6 +359,19 @@ func (c *ApiController) Login() { return } + // Handle username conflicts + tmpUser := object.GetUser(fmt.Sprintf("%s/%s", application.Organization, userInfo.Username)) + if tmpUser != nil { + uid, err := uuid.NewRandom() + if err != nil { + c.ResponseError(err.Error()) + return + } + + uidStr := strings.Split(uid.String(), "-") + userInfo.Username = fmt.Sprintf("%s_%s", userInfo.Username, uidStr[1]) + } + properties := map[string]string{} properties["no"] = strconv.Itoa(len(object.GetUsers(application.Organization)) + 2) user = &object.User{ @@ -394,7 +408,7 @@ func (c *ApiController) Login() { record := object.NewRecord(c.Ctx) record.Organization = application.Organization record.User = user.Name - util.SafeGoroutine(func() {object.AddRecord(record)}) + util.SafeGoroutine(func() { object.AddRecord(record) }) } else if provider.Category == "SAML" { resp = &Response{Status: "error", Msg: "The account does not exist"} } diff --git a/idp/wechat.go b/idp/wechat.go index 3f6babea..727ad7cc 100644 --- a/idp/wechat.go +++ b/idp/wechat.go @@ -185,7 +185,7 @@ func (idp *WeChatIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, error) userInfo := UserInfo{ Id: id, - Username: id, + Username: wechatUserInfo.Nickname, DisplayName: wechatUserInfo.Nickname, AvatarUrl: wechatUserInfo.Headimgurl, } diff --git a/routers/record.go b/routers/record.go index 8bfe988f..f65b6720 100644 --- a/routers/record.go +++ b/routers/record.go @@ -65,5 +65,5 @@ func RecordMessage(ctx *context.Context) { record.Organization, record.User = util.GetOwnerAndNameFromId(userId) } - util.SafeGoroutine(func() {object.AddRecord(record)}) + util.SafeGoroutine(func() { object.AddRecord(record) }) }