Odkryłem, że walidator mongoose ObjectId działa w celu walidacji prawidłowych identyfikatorów obiektów, ale znalazłem kilka przypadków, w których nieprawidłowe identyfikatory zostały uznane za prawidłowe. (np. dowolny ciąg 12 znaków)
var ObjectId = require('mongoose').Types.ObjectId;
ObjectId.isValid('microsoft123'); //true
ObjectId.isValid('timtomtamted'); //true
ObjectId.isValid('551137c2f9e1fac808a5f572'); //true
To, co w moim przypadku działa, to rzutowanie łańcucha na obiekt objectId, a następnie sprawdzenie, czy oryginalny łańcuch pasuje do wartości łańcucha w objectId.
new ObjectId('timtamtomted'); //616273656e6365576f726b73
new ObjectId('537eed02ed345b2e039652d2') //537eed02ed345b2e039652d2
Działa to, ponieważ prawidłowe identyfikatory nie zmieniają się po rzuceniu na identyfikator obiektu, ale ciąg, który otrzyma fałszywą poprawność, zmieni się po rzuceniu na identyfikator obiektu.