我正在使用使用NestJS的"AuthGuard" with 'jwt' strategy.应用程序
我想从用户那里收到经过认证的POST
。
因此,我添加了@Request() request
装饰的属性,然后得到request.user
来吸引用户。如描述here
我还添加了@Body() body
装饰属性以获取正文。
但是我注意到我不能同时使用两者。仅定义了第一个。
例如,如果我先定义@Body() body
:
@Post()
@UsePipes(new ValidationPipe({ transform: true })
public create(@Body() body, @Request() request) {
console.log(body); // { name: 'test'}
console.log(request); //undefined
}
如果我先定义@Request() request
:
@Post()
@UsePipes(new ValidationPipe({ transform: true })
public create(@Request() request, @Body() body) {
console.log(body); // undefined
console.log(request); // {name: 'test'}
}
并且没有正文和验证
@Post()
public create(@Request() request) {
console.log(request); // {name: 'test'}
}
如何从此处理程序中的同一请求中获取经过身份验证的用户和经过验证的正文?
奇怪的是@Request() request
实际上是在返回正文,而不是请求本身
不好意思,为什么我不使用request.body
?因为有一个自定义验证管道。
答案 0 :(得分:1)
有点困惑,但是可以肯定的是,您需要添加AuthGuard才能对中间件进行身份验证
<script>
示例DTO
@AuthGuard(JwtGuard)
@Controller()
export class TestContoller {
@Post('something')
doTheThing(@Body(new ValidationPipe) body: SomeModelDTO, @Req() request): User {
return request.user;
}
}