签发令牌这个事情可以交给这个命令去完成,下面我们先创建一个这样的命令,在终端,项目所在目录的下面,执行 npm run gc 生成一个命令,名字是 create-jwt,放在 auth/modules/jwt/commands 目录的下面。
回到项目,打开刚才生成的这个 CreateJwtCommand,命令参数里面添加一个 id ,它的值是用户的 id,类型是 number,还需要一个 name 类型是 string,这个 name 是用户的名字。签发 Jwt 的时候可以包含一点数据,我们可以把用户的 id 还有 name 放在要签发的 Jwt 里面,作为它的 playload 。
打开这个命令对应的处理器,在构造方法里面,注入一个依赖,需要的 jwtService,类型是 JwtService ,签发 Jwt 的时候会用到这个服务。
在 execute 这个方法里面,声明一个 accessToken,它的值可以用一下this.jwtService.sign,用它签发一个 Jwt,这个方法支持一个 payload 参数,这个参数的值就是要 包含在 Jwt 里的数据。 我们可以直接把 command.params 交给这个方法,它里面有 id 还有 name 这两个属性。
最后让这个方法返回 accessToken。
执行命令
下面我们可以执行一下这个命令,打开 auth.controller,给这个控制器添加一个构造方法,先在这里注入一个依赖,需要的是 commandBus。
然后用 async 标记一下这个 login 方法,在这个方法里面,解构一下 user,需要它的 id 还有 name 。 下面声明一个 token ,等于 await ,执行一下命令,新建一个 CreateJwtCommand 这个命令,提供一个对象,里面添加一个 id 还有 name。
最后让这个接口返回一个对象,里面有 id ,name 还有 token。
测试
在 Http 客户端测试一下,发送一下这个用户登录请求,成功以后,接口返回的响应里面会包含用户的 id,name 还有给他签发的 token。
在客户端应用那里,每次发送请求的时候要在一个特定的请求的头部里包含这个 token 的值。