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(
186
186
}
187
187
}
188
188
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
+
190
213
let final_roles = match existing_user {
191
214
Some ( ref user) => {
192
215
// For existing users: keep existing roles + add new valid OIDC roles
You can’t perform that action at this time.
0 commit comments