[英]Getting current logged in user - NestJS
所以。 我設置了一個DELETE
方法來刪除 Rents(當User
租出我數據庫中的一個Item
時會發生Rent
)。
我想確保檢查唯一可以取消租金的用戶是實際租用該項目的用戶。 我已經實施了一項檢查,以防止用戶從自己那里租用物品。
所以基本上在對Rents
表中的那一行執行刪除查詢之前,我想檢查當前登錄用戶的 ID 是否與Rents
表中該特定行的用戶 ID 匹配,然后才會執行查詢
userId 是租用Item
的User
的 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.