[JavaScript Applications] Как да предпазим базата от невалидни данни?
Днес решавах изпита Products от предното ниво. В процеса на тестване установих, че нищо не пречи да пратя заявка, в която подавам невалидни данни - например празно име, или NaN вместо цена.
Заобиколих проблема с проверки в кода, при това ако не се лъжа във вюто, където подозирам, че не им е мястото. Например, ако паролата и повторената парола не съвпадат просто показвам нотификация и не викам контролера. Обаче с една проста заявка през пощальона и проверките увисват.
Направих тая глупост колкото да тръгне що-годе коректно (бих постъпил така и на изпита). Все пак бих искал да знам как е правилно да се подходи в случая. Проверките в кода къде би трябвало да се случват? Как да направя проверки и на бекенда? Може би с някакъв cloud code?
Ето и самия код ако на някого му е интересно. Следвах схемата, която Богомил показа на подготовката.
Едит: И бонус въпрос. Има условие, в което се иска да се филтрират продуктите. Направих всичко посредством заявките, освен търсенето по ключова дума. Не можах да намеря как да го направя в документацията, затова просто филтрирах резултатите преди да ги визуализирам. Предполагам има начин да кажа какво точно искам да изтегля от базата. Някой ако го знае ще съм благодарен ако го сподели :)
Аз лично ползвам по-често sessionStorage. След като така ни е показвано до момента не би следвало да ни санкционират ако го правим по този начин.
Не смятам, че името и айдито са толкова чувствителна информация, че да не може да се запазват в сториджа.
Кукитата са алтернатива, ама хич не съм се занимавал да ги разучавам. Да правиш всеки път заявка ми се струва по-кофти идея.
Когато записваме данни в sessionStorage, те изчезват след затваряне на tab-а. След това като влезем, ние все едно не сме login-нати, но в базата си остава предишния sessionToken с който сме влязали и това мисля че прави проблем. Как точно разрешаваш това?
Не ме е интересувал достатъчно тоя проблем, че да го решавам. Просто не искам да си пълня с боклуци браузъра :)
Зависи... Добра практика е да запазваш в localStorage това, което не търпи външни промени. Искам да кажа, че ще е грубо да запишеш нещо в localStorage, някой администратор/модератор/потребител да направи промяна, която ще се отрази в сървъра, но клиента ще взема информацията от локалното хранилище и тя няма да е up-to-date.
В твоя случай не е проблем да запазиш всичката информация за потребителя в localStorage... Няма смисъл да дърпаш данни от сървъра, които знаеш, че няма да бъдат променени от друго място. А и щом си събрал смелост да записваш там най-важното ( session token ), защо да не запишеш и нещо по-маловажно?
Наистина ако "загубиш" токена, ти трябва да се логнеш отново. В сайта на parse.com пише следното:
"There is one distinct
Session
object for each user-installation pair; if a user issues a login request from a device they're already logged into, that user's previousSession
object for that Installation is automatically deleted."Аз разбирам, че можеш да се логваш колкото пъти си искаш и ще ти се дава нов sessionToken, а старите ще се изтриват. Пробвах го, едното е вярно - другото не е... Направих един спам от 10 логина през postman и всеки път получавах нов sessionToken, но старите си остават в базата данни и сега имам общо 10 Session обекта.
Аз изобщо не бих мислил за това нещо, защото се съмнявам да ми вземат точки, защото старите токени си стоят - те са скрити в базата и не правят нищо друго, освен да заемат място. Също така знам, че не бих ползвал parse.com освен ако не ме задължат да го правя.