File tree Expand file tree Collapse file tree 1 file changed +24
-1
lines changed Expand file tree Collapse file tree 1 file changed +24
-1
lines changed Original file line number Diff line number Diff line change @@ -186,7 +186,30 @@ pub async fn reply_login(
186186 }
187187 }
188188
189- let existing_user = Users . get_user ( & username) ;
189+ /// Attempts to find an existing user by trying both name and email identifiers
190+ /// This handles the case where OIDC provider configuration changes over time:
191+ /// - User was initially created with email as username (when name wasn't provided)
192+ /// - Later OIDC provider starts providing name, but user already exists with email as username
193+ fn find_existing_user ( user_info : & user:: UserInfo ) -> Option < User > {
194+ // Try to find user by name first (current preferred identifier)
195+ if let Some ( name) = & user_info. name {
196+ if let Some ( user) = Users . get_user ( name) {
197+ return Some ( user) ;
198+ }
199+ }
200+
201+ // If not found by name, try by email (fallback for legacy users)
202+ if let Some ( email) = & user_info. email {
203+ if let Some ( user) = Users . get_user ( email) {
204+ return Some ( user) ;
205+ }
206+ }
207+
208+ None
209+ }
210+
211+ let existing_user = find_existing_user ( & user_info) ;
212+
190213 let final_roles = match existing_user {
191214 Some ( ref user) => {
192215 // For existing users: keep existing roles + add new valid OIDC roles
You can’t perform that action at this time.
0 commit comments