Просмотр исходного кода

re-implement serializeUserSecurely

Yuki Takei 1 год назад
Родитель
Сommit
3e2db497ef
1 измененных файлов с 15 добавлено и 24 удалено
  1. 15 24
      packages/core/src/models/serializers/user-serializer.ts

+ 15 - 24
packages/core/src/models/serializers/user-serializer.ts

@@ -1,35 +1,26 @@
-const mongoose = require('mongoose');
+import type { IUser } from '~/interfaces';
 
 
+type IUserSerializedSecurely = Omit<IUser, 'password' | 'apiToken' | 'email'> & { email?: string };
 
 
-export function omitInsecureAttributes(user) {
-  // omit password
-  delete user.password;
-  // omit apiToken
-  delete user.apiToken;
+export const omitInsecureAttributes = (user: IUser): IUserSerializedSecurely => {
+  // eslint-disable-next-line @typescript-eslint/no-unused-vars
+  const { password, apiToken, ...rest } = user;
+
+  const secureUser: IUserSerializedSecurely = rest;
 
 
   // omit email
   // omit email
-  if (!user.isEmailPublished) {
-    delete user.email;
+  if (!secureUser.isEmailPublished) {
+    delete secureUser.email;
   }
   }
-  return user;
-}
 
 
-export function serializeUserSecurely(user) {
-  const User = mongoose.model('User');
+  return secureUser;
+};
 
 
+export const serializeUserSecurely = (user?: IUser | null): Partial<IUser> | null | undefined => {
   // return when it is not a user object
   // return when it is not a user object
-  if (user == null || !(user instanceof User)) {
+  if (user == null || !('username' in user)) {
     return user;
     return user;
   }
   }
 
 
-  let serialized = user;
-
-  // invoke toObject if page is a model instance
-  if (user.toObject != null) {
-    serialized = user.toObject();
-  }
-
-  omitInsecureAttributes(serialized);
-
-  return serialized;
-}
+  return omitInsecureAttributes(user);
+};