如何使用事件订阅者类型来散列密码
How to Hash a Password with the Event Subscriber Typeorm
快速提问:
我在 Whosebug 上搜索过,没有看到像这样直接的问题,而且 google 似乎没有给出很好的答案。
我正在使用 Nestjs 和 Typeorm,并且正在尝试使用 EventSubscriber() 对密码进行哈希处理。
代码如下:
user.subscriber.ts
@EventSubscriber()
export class UserSubscriber implements EntitySubscriberInterface<User> {
private iterations = Number(process.env.PASSWORD_ITERATIONS);
// eslint-disable-next-line @typescript-eslint/ban-types
public listenTo(): Function | string {
return User;
}
public afterLoad(
entity: User,
event?: LoadEvent<User>,
): Promise<any> | void {}
public beforeInsert(event: InsertEvent<User>): Promise<any> | void {
const { password } = event.entity;
const salt = crypto.randomBytes(20).toString('hex');
const hash = crypto
.pbkdf2Sync(password, salt, this.iterations, 32, 'sha512')
.toString('hex');
event.entity.password = [salt, hash].join('$');
}
}
我试图在插入之前对密码进行哈希处理,然后将其设置为用户密码。很简单的东西。我只是想确保我在这里做的方式是最好的方式。它有效,但我担心像我现在这样重置 event.entity.password
。
任何反馈将不胜感激,如果这不是这个问题的地方,请告诉我,我会移动它。 :) 谢谢!
您可以通过使用 @BeforeInsert() 挂钩在您的实体定义中执行此操作
喜欢:
@Entity()
export class JohnEntity {
@BeforeInsert()
hashPassword() {
const hashedPassword = hashMyPass(this.password);
this.password = hashedPassword;
}
@Column('text') password: string;
}
我写在这里,可能有错误。尝试自己写。
它可以很好地用于散列密码或任何东西。
快速提问:
我在 Whosebug 上搜索过,没有看到像这样直接的问题,而且 google 似乎没有给出很好的答案。
我正在使用 Nestjs 和 Typeorm,并且正在尝试使用 EventSubscriber() 对密码进行哈希处理。
代码如下: user.subscriber.ts
@EventSubscriber()
export class UserSubscriber implements EntitySubscriberInterface<User> {
private iterations = Number(process.env.PASSWORD_ITERATIONS);
// eslint-disable-next-line @typescript-eslint/ban-types
public listenTo(): Function | string {
return User;
}
public afterLoad(
entity: User,
event?: LoadEvent<User>,
): Promise<any> | void {}
public beforeInsert(event: InsertEvent<User>): Promise<any> | void {
const { password } = event.entity;
const salt = crypto.randomBytes(20).toString('hex');
const hash = crypto
.pbkdf2Sync(password, salt, this.iterations, 32, 'sha512')
.toString('hex');
event.entity.password = [salt, hash].join('$');
}
}
我试图在插入之前对密码进行哈希处理,然后将其设置为用户密码。很简单的东西。我只是想确保我在这里做的方式是最好的方式。它有效,但我担心像我现在这样重置 event.entity.password
。
任何反馈将不胜感激,如果这不是这个问题的地方,请告诉我,我会移动它。 :) 谢谢!
您可以通过使用 @BeforeInsert() 挂钩在您的实体定义中执行此操作 喜欢:
@Entity()
export class JohnEntity {
@BeforeInsert()
hashPassword() {
const hashedPassword = hashMyPass(this.password);
this.password = hashedPassword;
}
@Column('text') password: string;
}
我写在这里,可能有错误。尝试自己写。 它可以很好地用于散列密码或任何东西。