簡體   English   中英

獲取當前登錄用戶 - NestJS

[英]Getting current logged in user - NestJS

所以。 我設置了一個DELETE方法來刪除 Rents(當User租出我數據庫中的一個Item時會發生Rent )。

我想確保檢查唯一可以取消租金的用戶是實際租用該項目的用戶。 我已經實施了一項檢查,以防止用戶從自己那里租用物品。

所以基本上在對Rents表中的那一行執行刪除查詢之前,我想檢查當前登錄用戶的 ID 是否與Rents表中該特定行的用戶 ID 匹配,然后才會執行查詢

租金表條目示例在此處輸入圖片說明

userId 是租用ItemUser的 ID (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方法做同樣的事情時,即使一切都以相同的方式設置,它似乎不起作用。

取消租金控制器

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

當我在 cancelRent 控制器中運行console.log(user) ,我得到undefined ,但是當我在 getMyItems 方法中運行它時,它會正常返回當前用戶。 是因為它是DELETE請求而不是GET請求嗎?

cancelRent()缺少@ApiBearerAuth()

我忘記在我的 Rents Controller 中包含 AuthGuard()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM