From e5d47daf26c2472c123faf8549331ac1338d69f5 Mon Sep 17 00:00:00 2001 From: feitianbubu Date: Mon, 9 Feb 2026 15:03:41 +0800 Subject: [PATCH 1/2] feat: allow custom username for new users --- controller/oauth.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/controller/oauth.go b/controller/oauth.go index 65e18f9da..faa22dd4f 100644 --- a/controller/oauth.go +++ b/controller/oauth.go @@ -237,6 +237,13 @@ 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 { + user.Username = oauthUser.Username + } + } + if oauthUser.DisplayName != "" { user.DisplayName = oauthUser.DisplayName } else if oauthUser.Username != "" { From af31935102df21e6df5c99fa3a07315084b4d13a Mon Sep 17 00:00:00 2001 From: Seefs Date: Tue, 24 Feb 2026 13:26:19 +0800 Subject: [PATCH 2/2] fix: check oauthUser.Username length --- controller/oauth.go | 17 ++++++++++------- model/user.go | 2 ++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/controller/oauth.go b/controller/oauth.go index faa22dd4f..0bb33d2cd 100644 --- a/controller/oauth.go +++ b/controller/oauth.go @@ -240,7 +240,10 @@ func findOrCreateOAuthUser(c *gin.Context, provider oauth.Provider, oauthUser *o if oauthUser.Username != "" { if exists, err := model.CheckUserExistOrDeleted(oauthUser.Username, ""); err == nil && !exists { - user.Username = oauthUser.Username + // 防止索引退化 + if len(oauthUser.Username) <= model.UserNameMaxLength { + user.Username = oauthUser.Username + } } } @@ -302,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 e0c9c686f..f5ba5cebe 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 {