簡體   English   中英

Joi - 對特定條件使用“有效”

[英]Joi - use 'valid' for specific condition

我嘗試驗證查詢參數 userId。

如果用戶是管理員,則他可以使用任何用戶 ID。

如果沒有 - 則使用特定數組中的唯一 id。

const validUserIds = isUserAdmin ? req.query.userId : userIds;
const schema = Joi.object().keys({
    userId: Joi.string().optional().regex(UUIDRegex).valid(validUserIds),
  });
Joi.validate(req.query, schema).then(.....);

問題:當我們發送錯誤的用戶 ID(例如“abc”等,正則表達式驗證應該失敗)並且用戶是管理員時,驗證成功通過。

我可以創建這樣的東西:如果用戶是管理員,則僅通過 rexeg 驗證,如果沒有 - 通過正則表達式 + 有效 ID 列表驗證。

Joi.when在這里聽起來是正確的功能。

userId: Joi.string()
  .regex(UUIDRegex)
  .when('isUserAdmin', {
    is: false,
    then: yourValidateUserIdFunction() // validate
  });

UUIDRegex ,我們檢查用戶 ID 是否為字符串,然后我們檢查它是否與所有用戶的UUIDRegex匹配,最后我們檢查用戶 ID 在用戶不是管理員時是否有效。

或者,如果isUserAdmin在 Joi 架構之外,則根據該信息創建兩個不同的架構:

const isUserAdmin = true;
if (isAdmin) {
  joi.object({
    userId: Joi.string().regex(UUIDRegex),
  });
} else {
  joi.object({
    userId: Joi.string().regex(UUIDRegex).validateUserId(), // validate
  });
}

暫無
暫無

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

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