用户登录

在 Auth 服务里添加一个处理用户登录用的方法,它是一个 async 方法,名字是 login,方法接收一个 data 参数 ,类型可以去定义一下。

在 Auth 模块里添加一个新的文件,auth.dto.ts,文件里面导出一个类, LoginDto,类里面添加一个 name,值的类型是 string, 下面再添加一个 password,值的类型也是 string。

回到 Auth 服务,它里面这个 login 方法的 data 参数的类型设置成 LoginDto。

方法里面先从 data 参数里面,把 name 还有 password 解构出来。

下面添加一个 entity ,它的值可以按照登录请求时带着的用户名找到对应的用户,在 User 服务里可以去定义一下这个方法。

添加一个 async 方法,名字可以叫 findByName,接收一个 name 参数,类型是 string,return 的是 await,执行 this.userRepository 上的 findOne,设置一下查询条件,name 的值应该等于这个方法的 name 参数的值。

回到 Auth 服务,await,执行 this.userService 上的 findByName,把 name 交给它。

下面做一下判断,如果没找到用户,我们可以 throw 一个异常,类型可以是 UnauthorizedException,异常的信息是 用户名不存在。

然后再做一下判断,!,await,用一下用户实体上的 comparePassword 这个方法,把 password 交给它,这个方法会去比较用户的密码,匹配的话它就会返回 true。

如果不匹配,我们也可以 throw 一个异常,类型是 UnauthorizedException,异常信息是 密码不匹配。

最后暂时 return 这个 entity ,一会儿我们会配置应用,给用户签发一个 JWT Token。

控制器

打开 AuthController,在这个控制器里添加一个路由,路由支持 HTTP 的 POST 请求,用 Post 这个装饰器装饰一下,注意这个 Post 应该来自 @nestjs/common,不是我们之前自己定义表示应用里要发布的内容的 Post 实体。

给它一个 login 参数值,添加一个路由处理方法,名字叫 login,方法接收一个 data 参数,这个参数得用 @Body 装饰一下,data 的类型是 LoginDto。

方法 return 的是 await ,执行 this.authService.login,把 data 参数交给这个方法。

测试

下面可以找一个 HTTP 客户端测试一下,请求的方法选择 POST, 地址是 localhost:3000/auth/login。请求里面带着一个 JSON 格式的数据, 里面需要 name 属性,值是用户名 ,再添加一个 password,值是用户的密码。

发送一下这个登录请求, 因为我提供的密码不对,所以接口给我们返回了一个 401 的错误,并且会提示密码不对。

再提供一个正确的用户登录密码,发送请求,登录成功就会返回请求登录的这个用户数据,下面再试一下,提供一个不存在的用户名,得到的响应是 401,提示用户名不存在。

定义用户登录接口(auth/login)《 Nest.js 应用框架:身份验证 》

统计

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

社会化网络

关于

微信订阅号

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