diff --git a/controller/oauth.go b/controller/oauth.go index 65e18f9daa17..0bb33d2cd79a 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 != "" { @@ -295,12 +305,12 @@ func findOrCreateOAuthUser(c *gin.Context, provider oauth.Provider, oauthUser *o // Set the provider user ID on the user model and update provider.SetProviderUserID(user, oauthUser.ProviderUserID) if err := tx.Model(user).Updates(map[string]interface{}{ - "github_id": user.GitHubId, - "discord_id": user.DiscordId, - "oidc_id": user.OidcId, - "linux_do_id": user.LinuxDOId, - "wechat_id": user.WeChatId, - "telegram_id": user.TelegramId, + "github_id": user.GitHubId, + "discord_id": user.DiscordId, + "oidc_id": user.OidcId, + "linux_do_id": user.LinuxDOId, + "wechat_id": user.WeChatId, + "telegram_id": user.TelegramId, }).Error; err != nil { return err } diff --git a/model/user.go b/model/user.go index e0c9c686fdbb..f5ba5cebe90f 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 {