From 9478c5e7ac8254b5f522c006da0c1c49bb282727 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Tue, 24 Feb 2026 17:04:07 -0600 Subject: [PATCH] refac --- backend/open_webui/config.py | 12 ++++++++++++ backend/open_webui/models/auths.py | 5 ++++- backend/open_webui/utils/oauth.py | 31 ++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index 5c45b9f35..5029fb7ca 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -642,6 +642,18 @@ OAUTH_UPDATE_PICTURE_ON_LOGIN = PersistentConfig( os.environ.get("OAUTH_UPDATE_PICTURE_ON_LOGIN", "False").lower() == "true", ) +OAUTH_UPDATE_NAME_ON_LOGIN = PersistentConfig( + "OAUTH_UPDATE_NAME_ON_LOGIN", + "oauth.update_name_on_login", + os.environ.get("OAUTH_UPDATE_NAME_ON_LOGIN", "False").lower() == "true", +) + +OAUTH_UPDATE_EMAIL_ON_LOGIN = PersistentConfig( + "OAUTH_UPDATE_EMAIL_ON_LOGIN", + "oauth.update_email_on_login", + os.environ.get("OAUTH_UPDATE_EMAIL_ON_LOGIN", "False").lower() == "true", +) + OAUTH_ACCESS_TOKEN_REQUEST_INCLUDE_CLIENT_ID = ( os.environ.get("OAUTH_ACCESS_TOKEN_REQUEST_INCLUDE_CLIENT_ID", "False").lower() == "true" diff --git a/backend/open_webui/models/auths.py b/backend/open_webui/models/auths.py index 0b4639fc6..f0b52f1c0 100644 --- a/backend/open_webui/models/auths.py +++ b/backend/open_webui/models/auths.py @@ -197,7 +197,10 @@ class AuthsTable: with get_db_context(db) as db: result = db.query(Auth).filter_by(id=id).update({"email": email}) db.commit() - return True if result == 1 else False + if result == 1: + Users.update_user_by_id(id, {"email": email}, db=db) + return True + return False except Exception: return False diff --git a/backend/open_webui/utils/oauth.py b/backend/open_webui/utils/oauth.py index 6e59317f8..284917d22 100644 --- a/backend/open_webui/utils/oauth.py +++ b/backend/open_webui/utils/oauth.py @@ -55,6 +55,8 @@ from open_webui.config import ( OAUTH_ADMIN_ROLES, OAUTH_ALLOWED_DOMAINS, OAUTH_UPDATE_PICTURE_ON_LOGIN, + OAUTH_UPDATE_NAME_ON_LOGIN, + OAUTH_UPDATE_EMAIL_ON_LOGIN, OAUTH_ACCESS_TOKEN_REQUEST_INCLUDE_CLIENT_ID, OAUTH_AUDIENCE, WEBHOOK_URL, @@ -129,6 +131,8 @@ auth_manager_config.OAUTH_ALLOWED_DOMAINS = OAUTH_ALLOWED_DOMAINS auth_manager_config.WEBHOOK_URL = WEBHOOK_URL auth_manager_config.JWT_EXPIRES_IN = JWT_EXPIRES_IN auth_manager_config.OAUTH_UPDATE_PICTURE_ON_LOGIN = OAUTH_UPDATE_PICTURE_ON_LOGIN +auth_manager_config.OAUTH_UPDATE_NAME_ON_LOGIN = OAUTH_UPDATE_NAME_ON_LOGIN +auth_manager_config.OAUTH_UPDATE_EMAIL_ON_LOGIN = OAUTH_UPDATE_EMAIL_ON_LOGIN auth_manager_config.OAUTH_AUDIENCE = OAUTH_AUDIENCE @@ -1548,6 +1552,33 @@ class OAuthManager: # Update the user object in memory as well, # to avoid problems with the ENABLE_OAUTH_GROUP_MANAGEMENT check below user.role = determined_role + + if auth_manager_config.OAUTH_UPDATE_NAME_ON_LOGIN: + username_claim = auth_manager_config.OAUTH_USERNAME_CLAIM + if username_claim: + new_name = user_data.get(username_claim) + if new_name and new_name != user.name: + Users.update_user_by_id(user.id, {"name": new_name}, db=db) + user.name = new_name + log.debug(f"Updated name for user {user.email}") + + if auth_manager_config.OAUTH_UPDATE_EMAIL_ON_LOGIN: + email_claim = auth_manager_config.OAUTH_EMAIL_CLAIM + if email_claim: + new_email = user_data.get(email_claim) + if new_email and new_email.lower() != user.email.lower(): + existing_user = Users.get_user_by_email(new_email, db=db) + if existing_user: + log.error( + f"Cannot update email to {new_email} for user {user.id} because it is already taken." + ) + else: + Auths.update_email_by_id( + user.id, new_email.lower(), db=db + ) + user.email = new_email.lower() + log.debug(f"Updated email for user {user.id}") + # Update profile picture if enabled and different from current if auth_manager_config.OAUTH_UPDATE_PICTURE_ON_LOGIN: picture_claim = auth_manager_config.OAUTH_PICTURE_CLAIM