用户在客户端请求发布一个新的内容,服务端要把内容存储在数据仓库里,保存这个内容数据的时候要记录一下内容的作者。现在我们有了 authGuard 这个中间件,它可以验证用户身份,然后在请求里加上当前用户相关的数据,这样在接口处理器那里就可以使用当前用户相关的数据了。
先打开 src/post 里的 post.router ,在文件的顶部,先导入需要用的 authGuard,这个东西来自上一级目录 auth 下面的 auth.middleware 。
然后把这个中间件安排在 创建内容 这个接口上,放在接口地址还有接口处理器中间,添加一个 authGuard。
打开 post 里的 post.model ,在 PostModel 里面添加一个新的属性,名字是 userId ,它的值是内容作者的 ID 号,类型是 number。
再去修改一下创建内容接口的处理器,打开 post.controller ,找到创建内容接口的处理器,就是这个 store 函数。
在准备数据的下面,可以从请求里的 user 属性里面,把用户的 id 解构出来,解构出来重新给它起个名字叫 userId ,这个 id 属性是在 request.user 属性里面,authGuard 验证了用户身份以后,就会在请求里添加这个 user 属性,它的值就是当前用户。
然后在创建内容的时候,给 createPost 提供的数据里面,除了这个 title ,content ,再添加一个 userId,对应的值就是当前用户的 id 号。
在 HTTP 客户端可以测试一下,先打开 用户登录 这个请求,配置一下请求的主体数据,修改一下用户名,比如 张三。然后发送一下这个请求,服务端验证成功就会给这个用户签发一个令牌,复制一下这个 token 属性的值。
打开 内容 里的 创建内容 这个请求。先配置一下这个请求的身份验证,类型选择 Bearer Token,在 TOKEN 里面把刚才给张三这个用户签发的令牌值放到这里。
再去配置一下这个请求的主体数据,设置一下内容的标题还有内容正文。然后发送一下这个请求,创建内容成功就会得到一个状态是 201 的响应。
打开 内容列表 请求,发送一下,观察一下从服务端那里得到的响应数据,你会发现刚才我们新发布的这个内容项目,注意这个内容项目里已经包含了内容作者相关的数据,这个内容的作者的名字是 张三。
下面可以再到数据库客户端观察一下,打开应用的数据仓库,然后打开仓库里的 post 这个数据表格,在这个表里会有一条新的数据记录,这条记录的 userId 的值就是这个内容的作者的 ID 号,这个作者的名字就是 张三。