下面可以创建一个守卫,把它放在 auth/modules/jwt/guards 里面,名字是 auth-jwt.guard.ts,文件里面定义一个类,用 @Injectable() 装饰一下,导出一个类,类的名字是 AuthJwtGuard,让它继承一下 AuthGuard 这个守卫,提供一个参数,值是身份验证策略的名字,比如之前我们创建的这个 auth-jwt。
然后打开 auth.controller,在这个控制器里定义一个测试 Jwt 这种身份验证策略用的接口,用 @Post 装饰一下,接口地址是 auth/validate,再用 @UseGuards 装饰器使用一个守卫,用一下 AuthJwtGuard 这个守卫。
处理器的名字是 authValidate,添加一个参数,用 @CurrentUser() 这个装饰器获取到当前用户,也就是身份验证策略的 validate 方法返回的数据。把它交给 user,类型可以先设置成 UserEntity 。
方法里面可以 return 这个 user 。
测试
下面在 Http 客户端测试一下,在用户的下面新建一个请求,名字是验证令牌,请求用的方法设置成 Post,配置一下请求地址,一个基本的地址,加上 auth/validate 。
直接发送一下这个请求,得到的是一个 401 未授权的响应。因为这个接口使用了 Jwt 这种身份验证策略,所以需要在请求的头部里包含用户的令牌。
打开用户登录请求,发送一下这个请求,复制一下得到的这个 token 的值,再回到验证令牌请求,配置一下这个请求的身份验证,在 Auth 的下面,选择 Bearer Token。
把复制的令牌的值粘贴到这个 Token 字段里面,这样就会在请求里面包含一个 Authorization 头部,对应的值是 Bearer 空格,然后是这个 Token 的值。
再发送一下这个请求,验证通过以后,会响应回来一些东西,这里面有用户的 id,name,这里响应回来的这些数据,是服务端解密并且验证了请求里的 Jwt 以后,从 Jwt 里面提取出来的,这些数据是当初我们在签发它的时候自己放进去的。