用户登录

在接口上使用身份验证策略,可以使用 @nestjs/passport 这个包提供的一个守卫。

打开 auth.controller ,比如我们要在这个 login 接口上用一下本地身份验证策略,可以先用一个 @UseGuards 装饰器,给它提供一个 AuthGuard ,然后设置一下要使用的身份验证策略的名字,比如之前我们创建了一个策略,起的名字是 auth-local 。

测试

在 Http 客户端可以测试一下,直接发送一下这个用户登录请求,得到的是一个异常响应,状态码是 401,表示 Unauthorized ,未授权。

原因是没有提供用户名还有密码,设置一下请求主体,类型选择 JSON,准备一个 JSON 数据,添加一个 name 属性,用户名是张三,再添加一个 password,密码是 123123 。

重新发送一下请求,这回接口正常返回了 logged in ,说明用户通过了身份验证。

本地策略
打开 auth-local.strategy 再试一下,让这个 validate 返回一个 null,然后回到 Http 客户端,发送一下用户登录请求,这回得到的就是一个异常响应,提示用户未授权。

自定义守卫

在使用身份验证策略的时候, 我们用到了 AuthGuard 这个守卫,基于这个守卫可以创建一个专门为本地策略准备的守卫。在 src/auth/modules/local 下面新建一个文件,放在 guards 里面,名字是 auth-local.guard.ts。

文件里定义一个类,这个类用 @Injectable 装饰一下,类的名字是 AuthLocalGuard,让它继承一下 AuthGuard,提供一个参数,值就是要使用的身份验证策略的名字,比如 auth-local。

回到 auth.controller,在登录接口处理的上面,可以把这个 AuthGuard 换成一个 AuthLocalGuard 。这样这个 AuthGuard 就不再需要了,把上面导入它用的代码删除掉。

然后在 Http 客户端,再测试一下,发送一下用户登录请求,仍然会提示未授权。

使用本地身份验证策略(AuthLocalStrategy)《 Nest.js 企业级后端实践:用户登录 》

统计

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

社会化网络

关于

微信订阅号

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