首页 > 解决方案 > 获取当前登录用户 - NestJS

问题描述

所以。我设置了一种DELETE删除 Rent 的方法(Rent当我在我的数据库中User出租 an时会发生这种情况)。Item

我想确保检查唯一可以取消租金的用户是实际租用该项目的用户。我已经实施了一项检查,以防止用户从自己那里租用物品。

所以基本上在对表中的该行执行删除查询之前Rents,我想检查当前登录用户的 ID 是否与Rents表中该特定行的用户 ID 匹配,然后才会执行查询

租金表条目示例 在此处输入图像描述

userId 是User租用者的 ID Item(itemId)。

我设置了一个自定义GetUser()装饰器

import { User } from './../entities/user.entity';
import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const GetUser = createParamDecorator(
  (data, ctx: ExecutionContext): User => {
    const req = ctx.switchToHttp().getRequest();
    return req.user;
  },
);

现在,当我调用我的getMyItems方法来获取当前用户拥有的所有项目时,GetUser()装饰器工作正常,因为我可以访问请求对象上的用户。

GetMyItems 控制器

  @Get('/my')
  @ApiBearerAuth()
  async getMyItems(@GetUser() user: User): Promise<Item[]> {
    return this.itemsService.getMyItems(user);
  }

当我尝试对上述cancelRent方法做同样的事情时,即使一切都以相同的方式设置,它似乎也不起作用。

cancelRent 控制器

@Delete('/:id/cancel')
  async cancelRent(
    @Param('id') id: number,
    @GetUser() user: User,
  ): Promise<void> {
    return this.rentsService.cancelRent(id, user);
  }

当我console.log(user)在 cancelRent 控制器中运行时,我得到了undefined,但是当我在 getMyItems 方法中运行它时,它通常会返回当前用户。是因为它是DELETE请求而不是GET请求吗?

标签: javascriptnestjstypeorm

解决方案


cancelRent()不见了@ApiBearerAuth()


推荐阅读