fix: strip passwordHash from user API responses
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
7340658305
commit
ce2aa35a24
@ -14,8 +14,9 @@ export class UsersService extends BaseCrudService {
|
|||||||
|
|
||||||
async createUser(dto: CreateUserDto) {
|
async createUser(dto: CreateUserDto) {
|
||||||
const passwordHash = await bcrypt.hash(dto.password, 10);
|
const passwordHash = await bcrypt.hash(dto.password, 10);
|
||||||
const { password: _p, ...rest } = dto;
|
const { password: _pw, ...rest } = dto;
|
||||||
return this.create({ ...rest, passwordHash });
|
const created = await this.create({ ...rest, passwordHash });
|
||||||
|
return this.omitPasswordHash(created);
|
||||||
}
|
}
|
||||||
|
|
||||||
async listUsers(q: PageQuery) {
|
async listUsers(q: PageQuery) {
|
||||||
@ -25,15 +26,35 @@ export class UsersService extends BaseCrudService {
|
|||||||
if (ctx && ctx.orgCodes.length > 0) {
|
if (ctx && ctx.orgCodes.length > 0) {
|
||||||
where.orgCode = { in: ctx.orgCodes };
|
where.orgCode = { in: ctx.orgCodes };
|
||||||
}
|
}
|
||||||
return this.paginate(q.page, q.pageSize, where);
|
const result = await this.paginate(q.page, q.pageSize, where);
|
||||||
|
result.list = result.list.map((u: { passwordHash?: unknown }) => this.omitPasswordHash(u));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
async findById(id: string) {
|
||||||
|
const user = await super.findById(id);
|
||||||
|
return user ? this.omitPasswordHash(user) : user;
|
||||||
}
|
}
|
||||||
|
|
||||||
async updateUser(id: string, dto: UpdateUserDto) {
|
async updateUser(id: string, dto: UpdateUserDto) {
|
||||||
return this.update(id, { ...dto });
|
const updated = await this.update(id, { ...dto });
|
||||||
|
return this.omitPasswordHash(updated);
|
||||||
}
|
}
|
||||||
|
|
||||||
async resetPassword(id: string, dto: ResetPasswordDto) {
|
async resetPassword(id: string, dto: ResetPasswordDto) {
|
||||||
const passwordHash = await bcrypt.hash(dto.password, 10);
|
const passwordHash = await bcrypt.hash(dto.password, 10);
|
||||||
return this.update(id, { passwordHash });
|
const updated = await this.update(id, { passwordHash });
|
||||||
|
return this.omitPasswordHash(updated);
|
||||||
|
}
|
||||||
|
|
||||||
|
async softRemove(id: string) {
|
||||||
|
const removed = await super.softRemove(id);
|
||||||
|
return this.omitPasswordHash(removed);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 响应边界剥掉 passwordHash,避免泄漏(登录内部校验直接查库,不受影响)。 */
|
||||||
|
private omitPasswordHash<T extends { passwordHash?: unknown }>(row: T): Omit<T, 'passwordHash'> {
|
||||||
|
const { passwordHash: _passwordHash, ...rest } = row;
|
||||||
|
return rest;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user