This commit is contained in:
Timothy Jaeryang Baek
2026-02-24 17:04:07 -06:00
parent 62e7e0bc09
commit 9478c5e7ac
3 changed files with 47 additions and 1 deletions
+12
View File
@@ -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"
+4 -1
View File
@@ -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
+31
View File
@@ -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