为啥白名单不会出现错误模型 NestJs 的错误
Posted
技术标签:
【中文标题】为啥白名单不会出现错误模型 NestJs 的错误【英文标题】:Why does whitelist dont get error with wrong model NestJs为什么白名单不会出现错误模型 NestJs 的错误 【发布时间】:2019-08-20 04:50:49 【问题描述】:我想在路线的正文验证中使用白名单。我希望只接受与我的模型确认的数据,如果发送的某些参数不是我的模型 DTO 的一部分,则必须抛出错误。
这是我的 DTO:
export class RegisterDTO
@MinLength(5)
userName: string;
@MinLength(8)
password: string;
@IsNotEmpty()
seller: boolean;
address:
city: string;
street: string;
apartment?: string;
;
这是我的控制器:
@Post('register')
@UsePipes(new ValidationPipe( transform: true, whitelist: true))
async register(@Body() userDTO: RegisterDTO)
const user = await this.userService.create(userDTO);
const payload: Payload =
userName: user.userName,
seller: user.seller,
;
const token = await this.authService.signPayload(payload);
return user, token;
但是当我发送此数据时,我没有收到错误:
"userName": "userdasdnasdasdadad",
"password": "passwdasdasdasadasdasda",
"address":
"city": "kiev",
"street": "amosova"
,
"seller": false,
"test": "test"
“test”:“test”不能作为参数;我预计会抛出一个错误,但没有
【问题讨论】:
【参考方案1】:whitelist
选项仅在 json 转换为您的 dto 类时去除未知值而不抛出错误,因此在您的情况下,属性test
被静默删除。
如果要在遇到未知属性时抛出验证错误,需要添加选项forbidNonWhitelisted
:
@UsePipes(
new ValidationPipe(
transform: true,
whitelist: true,
forbidNonWhitelisted: true,
),
)
【讨论】:
感谢您的回答。我添加了 forbidNonWhitelisted: true;它从响应中删除测试,但不会抛出错误snag.gy/ideuRb.jpg 一切正常并给我令牌,但我发送了错误的模型并想得到一个错误 嗯,这很奇怪。我在这里试过了,它可以工作:codesandbox.io/s/… 当您使用 "username": "kiwi", "firstname": "123456"
向 9jlkpxv744.sse.codesandbox.io 发送 POST 请求时,您将通过 "whitelistValidation": "property firstname should not exist"
获得 400
是的,这是真的!如果您想使用嵌套验证(例如您的地址),请参阅此答案:***.com/a/53685045/4694994以上是关于为啥白名单不会出现错误模型 NestJs 的错误的主要内容,如果未能解决你的问题,请参考以下文章
Oauth 错误 invalid_request:redirect_uri 未列入白名单
phonegap 应用错误白名单拒绝:url='http://xyz.com'