feat: fix OAuth email completion flow

This commit is contained in:
haruka
2026-06-30 01:11:51 +08:00
parent d3acd8e96e
commit 260fda19b3
7 changed files with 177 additions and 9 deletions
@@ -383,6 +383,7 @@ func (h *AuthHandler) LinuxDoOAuthCallback(c *gin.Context) {
upstreamClaims,
compatEmail,
compatEmailUser,
emailVerificationRequired,
forceEmailOnSignup,
); err != nil {
redirectOAuthError(c, frontendCallback, "session_error", "failed to continue oauth login", "")
@@ -433,6 +434,7 @@ func (h *AuthHandler) createLinuxDoOAuthChoicePendingSession(
upstreamClaims map[string]any,
compatEmail string,
compatEmailUser *dbent.User,
emailVerificationRequired bool,
forceEmailOnSignup bool,
) error {
suggestionEmail := strings.TrimSpace(suggestedEmail)
@@ -467,6 +469,17 @@ func (h *AuthHandler) createLinuxDoOAuthChoicePendingSession(
if forceEmailOnSignup && compatEmailUser == nil {
completionResponse["choice_reason"] = "force_email_on_signup"
}
if (emailVerificationRequired || forceEmailOnSignup) && compatEmailUser == nil {
completionResponse["step"] = "create_account_required"
completionResponse["email_binding_required"] = true
completionResponse["force_email_on_signup"] = true
if emailVerificationRequired {
completionResponse["choice_reason"] = "email_verification_required"
}
delete(completionResponse, "email")
delete(completionResponse, "resolved_email")
resolvedChoiceEmail = ""
}
var targetUserID *int64
if compatEmailUser != nil && compatEmailUser.ID > 0 {