用户登录

NinghaoNgCamp:用过 Angular 才知道它有多强大。了解详情 / 报名参加 →

因为我不想在一般的查询里面返回用户的密码字段,所以在定义用户实体里的 password 字段的时候,把它的 select 选项设置成了 false,不过有时候我们可能需要用到用户的密码,比如用户请求登录的时候,我们需要验证用户提供的密码跟我们存储的密码是否匹配。

先在 Http 客户端,发送一个登录请求,提示了一个 500 的内部服务错误,可以再到运行项目的终端观察一下这个错误。

引起这个错误的原因就是登录需要验证用户的密码,但是查询出来的用户实体里面并没有包含密码字段。

回到项目,打开 AuthService,在这个服务里,login 方法是处理用户登录请求用的,它里面用到了一个 UserService 上的 findByName 查询出来指定名字的用户。

打开 UserService,找到 findByName,下面可以改进一下这个方法,让这个方法接收一个可选的 password 参数,值的类型是 boolean, 使用这个方法查询用户的时候,如果 password 参数的值是 true,可以在查询里包含用户的密码字段。

这个查询我们可以换成使用 queryBuilder ,添加一个 queryBuilder,await,this.userRepository,createQueryBuilder,别名是 user。

下面设置一下查询条件,queryBuilder,where,条件是 user.name 等于 :name,后面提供这个 name 的值,它的值应该就是给这个 findByName 方法提供的 name 参数的值 ..

然后判断一下,检查 password 参数的值,如果是 true,再用一下 queryBuilder,addSelect,特别设置一下要添加的字段,需要 user.password。

下面添加一个 entity,用一下 queryBuilder,getOne,最后让方法 return 查询出来的这个 User Entity。

然后回到 AuthService,使用 findByName 这个方法查询用户的时候,如果需要用户的密码,可以把它的第二个参数设置成 true。

测试

回到 Http 客户端,发送一下这个登录请求,这回用户就又可以成功登录了。

在查询中包含隐藏字段(addSelect)《 Nest.js 应用框架:评论 》

统计

10872
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点