Quellcode durchsuchen

fix(server) Cannot change first time password due to null in first and last name payload (#1205)

* fix(server) Cannot change first time password due to null in first and last name payload

* Added error message for form on the web
Alex vor 2 Jahren
Ursprung
Commit
1eb9ac8217

+ 15 - 1
server/apps/immich/src/api-v1/user/user.core.ts

@@ -35,11 +35,25 @@ export class UserCore {
       }
       }
     }
     }
 
 
+    const user = await this.userRepository.get(id);
+    if (!user) {
+      throw new NotFoundException('User not found');
+    }
+
     try {
     try {
       if (dto.password) {
       if (dto.password) {
         dto.password = await hash(dto.password, SALT_ROUNDS);
         dto.password = await hash(dto.password, SALT_ROUNDS);
       }
       }
-      return this.userRepository.update(id, dto);
+
+      user.password = dto.password ?? user.password;
+      user.email = dto.email ?? user.email;
+      user.firstName = dto.firstName ?? user.firstName;
+      user.lastName = dto.lastName ?? user.lastName;
+      user.isAdmin = dto.isAdmin ?? user.isAdmin;
+      user.shouldChangePassword = dto.shouldChangePassword ?? user.shouldChangePassword;
+      user.profileImagePath = dto.profileImagePath ?? user.profileImagePath;
+
+      return this.userRepository.update(id, user);
     } catch (e) {
     } catch (e) {
       Logger.error(e, 'Failed to update user info');
       Logger.error(e, 'Failed to update user info');
       throw new InternalServerErrorException('Failed to update user info');
       throw new InternalServerErrorException('Failed to update user info');

+ 31 - 15
web/src/lib/components/forms/create-user-form.svelte

@@ -1,6 +1,10 @@
 <script lang="ts">
 <script lang="ts">
 	import { api } from '@api';
 	import { api } from '@api';
 	import { createEventDispatcher } from 'svelte';
 	import { createEventDispatcher } from 'svelte';
+	import {
+		notificationController,
+		NotificationType
+	} from '../shared-components/notification/notification';
 
 
 	let error: string;
 	let error: string;
 	let success: string;
 	let success: string;
@@ -38,23 +42,35 @@
 			const firstName = form.get('firstName');
 			const firstName = form.get('firstName');
 			const lastName = form.get('lastName');
 			const lastName = form.get('lastName');
 
 
-			const { status } = await api.userApi.createUser({
-				email: String(email),
-				password: String(password),
-				firstName: String(firstName),
-				lastName: String(lastName)
-			});
-
-			if (status === 201) {
-				success = 'New user created';
-
-				dispatch('user-created');
-
-				isCreatingUser = false;
-				return;
-			} else {
+			try {
+				const { status } = await api.userApi.createUser({
+					email: String(email),
+					password: String(password),
+					firstName: String(firstName),
+					lastName: String(lastName)
+				});
+
+				if (status === 201) {
+					success = 'New user created';
+
+					dispatch('user-created');
+
+					isCreatingUser = false;
+					return;
+				} else {
+					error = 'Error create user account';
+					isCreatingUser = false;
+				}
+			} catch (e) {
 				error = 'Error create user account';
 				error = 'Error create user account';
 				isCreatingUser = false;
 				isCreatingUser = false;
+
+				console.log('[ERROR] registerUser', e);
+
+				notificationController.show({
+					message: `Error create new user, check console for more detail`,
+					type: NotificationType.Error
+				});
 			}
 			}
 		}
 		}
 	}
 	}