diff --git a/controller/oauth.go b/controller/oauth.go index 75ab2989..818a28f8 100644 --- a/controller/oauth.go +++ b/controller/oauth.go @@ -237,6 +237,16 @@ func findOrCreateOAuthUser(c *gin.Context, provider oauth.Provider, oauthUser *o // Set up new user user.Username = provider.GetProviderPrefix() + strconv.Itoa(model.GetMaxUserId()+1) + + if oauthUser.Username != "" { + if exists, err := model.CheckUserExistOrDeleted(oauthUser.Username, ""); err == nil && !exists { + // 防止索引退化 + if len(oauthUser.Username) <= model.UserNameMaxLength { + user.Username = oauthUser.Username + } + } + } + if oauthUser.DisplayName != "" { user.DisplayName = oauthUser.DisplayName } else if oauthUser.Username != "" { diff --git a/model/user.go b/model/user.go index e0f803a9..f3e66e6c 100644 --- a/model/user.go +++ b/model/user.go @@ -15,6 +15,8 @@ import ( "gorm.io/gorm" ) +const UserNameMaxLength = 20 + // User if you add sensitive fields, don't forget to clean them in setupLogin function. // Otherwise, the sensitive information will be saved on local storage in plain text! type User struct {