用户登录

打开 AuthController,在这个控制器里添加一个测试用的路由,用 @Get 装饰器,地址是 test,添加一个方法,名字是 authTest,让这个方法 return 一个对象,里面有个 message 属性,值是 ok。

如果你想在这里验证用户的身份,可以使用一个守卫,方法上面用一个 UseGuard,里面添加一个 AuthGuard,这个守卫来自 @nestjs/passport 这个包。

使用这个守卫的时候需要提供给它要使用的策略的名字,比如 jwt,不过我们之前在 Auth 模块里配置了一下默认的策略就是这个 jwt 策略,所以使用 AuthGuard 的时候就不再需要特别设置策略的名字了。

打开一个 HTTP 客户端,先配置一个登录请求,用 POST 方法请求 auth/login,请求里带着用户名还有密码,验证成功在响应回来的数据里会包含一个 token 属性,复制一下这个属性的值。

再配置一个请求,方法使用 GET,地址是 auth/test,在这个路由的处理方法的上面,我们用了 AuthGuard ,所以会验证用户的身份。

请求里不需要带着数据, 打开 Auth,选择 Bearer ,把复制的 Token 值粘贴到这里。

发送一下这个请求,响应是 401,表示未授权,等会再处理一下。

回到运行项目开发服务的终端,你会发现这里输出了一个 JwtStrategy 里的 validate 方法的 payload 参数的值。

这里面会包含用户的 id,还有 name ,另外还有一个 iat,它表示的是这个 JWT 的签发时间,exp 的值是这个 JWT 的过期时间。

用户登录成功给用户签发 JWT 的时候,我们把用户的 id 还有 name 放到了这个签发的 JWT 里面。

用户再请求的时候,它需要在请求里带着 Authorization 头部,值是 Bearer 空格,然后是 Token 的值。

在 auth/test 路由上用了 AuthGuard ,所以会检查用户的身份,JwtStrategy 会从请求的头部里,把 token 的值提取出来,然后解析一下,解析出来的东西交给了 validate 方法的 payload 参数,我们在 validate 方法里输出了这个 payload 参数的值,所以你才会在控制台上看到这个 payload 里面包含的东西。

为路由启用验证用户身份(AuthGuard)《 Nest.js 应用框架:身份验证 》

统计

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

社会化网络

关于

微信订阅号

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