fix(oauth): avoid overwriting user state when binding

This commit is contained in:
CaIon
2026-08-11 22:03:45 +08:00
parent 3d5dc36f1d
commit d7992672a6
11 changed files with 125 additions and 22 deletions
+5
View File
@@ -170,3 +170,8 @@ func (p *DiscordProvider) SetProviderUserID(user *model.User, providerUserID str
func (p *DiscordProvider) GetProviderPrefix() string {
return "discord_"
}
// ProviderUserIDColumn returns the users-table column storing this provider's user ID.
func (p *DiscordProvider) ProviderUserIDColumn() string {
return "discord_id"
}
+5
View File
@@ -312,6 +312,11 @@ func (p *GenericOAuthProvider) GetProviderPrefix() string {
return p.config.Slug + "_"
}
// ProviderUserIDColumn returns the users-table column storing this provider's user ID.
func (p *GenericOAuthProvider) ProviderUserIDColumn() string {
return ""
}
// GetProviderId returns the provider ID for binding purposes
func (p *GenericOAuthProvider) GetProviderId() int {
return p.config.Id
+5
View File
@@ -176,3 +176,8 @@ func (p *GitHubProvider) SetProviderUserID(user *model.User, providerUserID stri
func (p *GitHubProvider) GetProviderPrefix() string {
return "github_"
}
// ProviderUserIDColumn returns the users-table column storing this provider's user ID.
func (p *GitHubProvider) ProviderUserIDColumn() string {
return "github_id"
}
+5
View File
@@ -184,6 +184,11 @@ func (p *LinuxDOProvider) GetProviderPrefix() string {
return "linuxdo_"
}
// ProviderUserIDColumn returns the users-table column storing this provider's user ID.
func (p *LinuxDOProvider) ProviderUserIDColumn() string {
return "linux_do_id"
}
// TrustLevelError indicates the user's trust level is too low
type TrustLevelError struct {
Required int
+5
View File
@@ -175,3 +175,8 @@ func (p *OIDCProvider) SetProviderUserID(user *model.User, providerUserID string
func (p *OIDCProvider) GetProviderPrefix() string {
return "oidc_"
}
// ProviderUserIDColumn returns the users-table column storing this provider's user ID.
func (p *OIDCProvider) ProviderUserIDColumn() string {
return "oidc_id"
}
+6
View File
@@ -33,4 +33,10 @@ type Provider interface {
// GetProviderPrefix returns the prefix for auto-generated usernames (e.g., "github_")
GetProviderPrefix() string
// ProviderUserIDColumn returns the users-table column that stores this provider's
// user ID, used by bind flows to update only the binding column instead of
// writing back a full user snapshot. Providers that persist bindings elsewhere
// (e.g. the user_oauth_bindings table) return an empty string.
ProviderUserIDColumn() string
}