先观察一下 user 数据表里的数据记录,你会发现用户的密码现在是明文存储的,就是密码是什么存储的就是什么,这会有很大的安全问题,我们要存储的应该是 Hash 之后的用户密码。
在 TypeOrm 里面,有一种监听器,就是在实体里的一些可以在特定事件发生之后执行的方法,比如插入新的数据,更新数据,删除数据等等,都可以触发执行对应的方法。
在创建新的用户数据记录或者更新用户数据记录的时候可以先 Hash 一下用户的密码,然后再把它存储起来。
Hash 用户密码需要用到一个 Package,在终端,安装一下 bcrypt,保存在项目的依赖里,完成以后再安装一下对应的 Type,npm install 安装 @types/bcrypt,把这个包保存在项目的开发依赖里。
打开 User 实体,在文件的顶部先导入 bcrypt,import * as bcrypt from bcrypt。
然后在实体里添加一个监听器,我想让这个监听器在创建数据记录之前执行,先用一个 @BeforeInsert 装饰器,下面添加一个 async 法,名字是 hashPassword。
方法里面,设置一下 this.password 的值, await,执行 bcrypt 上的 hash 方法,hash 的密码是 this.password,rounds 数可以设置成 12。
在 HTTP 客户端配置一个请求,请求创建一个新的用户。
得到的响应里面会包含用户的 password 属性的值,这回它的值就会是 Hash 之后的用户密码了。
再回到数据库客户端,你会发现刚才创建的用户的 password 的值,会是 Hash 之后的。