Najważniejsze zagadnienia, które musisz znać
5 godz. 53 min · JavaScript · Full-stack i Programowanie
Adam GospodarczykPrzesyłanie oraz transformacja danych to jeden z najważniejszych elementów działania każdej aplikacji. Dobre zrozumienie tego w jaki sposób odbywa się ten proces, daje równocześnie lepsze zrozumienie całej struktury oraz podejmowania decyzji projektowych. W tym kursie znajdziesz lekcje, które pozwolą Ci uporządkować wiedzę na temat protokołu HTTP oraz formatów wymiany danych.
REST oraz GraphQL to nadal nieodłączone zagadnienia tematu wymiany informacji w kontekście aplikacji webowych. Pomimo tego, że ich koncepcje zwykle są bardzo dobrze opisane w różnych źródłach, tak ich wykorzystanie "na produkcji" potrafi sprawić problemy. W szczególności gdy weźmiemy pod uwagę, wyjątki oraz fakt, że nie każda aplikacja będzie wymagać implementacji REST czy GraphQL w 100%. W tym kursie znajdziesz wiele praktycznych wskazówek związanych z pracą z REST API oraz wprowadzenie do pracy z GraphQL.
Niektóre błędy w aplikacji są bardzo pożądane, w szczególności gdy jasno informują użytkownika o tym, co się wydarzyło oraz o tym, co może z tym zrobić. Pomimo tego, że w wielu przypadkach opracowanie komunikatów leży w rękach osoby odpowiedzialnej za copywriting (i/lub ux writing), tak sama implementacja tych komunikatów odbywa się po stronie kodu. Nie rzadko okazuje się, że poprawna i skuteczna walidacja danych oraz obsługa błędów nie jest oczywista w "produkcyjnych" sytuacjach. W tym kursie znajdziesz najczęściej spotykane problemy oraz sposoby ich rozwiązania.
Bazy danych są praktycznie nieodłączną częścią każdej aplikacji. W roli full-stacka prędzej czy później przyjdzie Ci z nimi pracować a nie rzadko nawet projektować oraz rozbudowywać ich struktury. W tym kursie znajdziesz informacje o bazach danych, które pozwolą Ci je zrozumieć oraz od razu poznać użyteczne techniki, które pomogą Ci w pracy z nimi, zarówno na produkcji jak i w środowisku lokalnym czy testowym.
Nie wszystkie informacje w aplikacji są publiczne. Niektóre wprost nie mogą takie być. Z tego powodu niezbędne są sposoby na to aby poznać a potem weryfikować tożsamość użytkownika, by na jej podstawie przydzielać mu dostęp wyłącznie do zasobów, do których odczytywania posiada uprawnienia. Istnieje wiele technik, które umożliwiają zarządzanie dostępem do danych i w tym kursie poznasz najważniejsze z nich. Dowiesz się nie tylko w jaki sposób zabezpieczać dane ale poznasz też najpopularniejsze sposoby na to aby te zabezpieczenia łamać i obchodzić. Mając świadomość takiej możliwości, będziesz w stanie lepiej podejmować decyzje o tym jak projektować dostęp do informacji.
Istnieją problemy charakterystyczne dla niemal każdej aplikacji. W związku z ich powszechnością, istnieje też szereg rozwiązań lub sposobów na to, aby możliwie zredukować ich następstwa. Na przestrzeni lekcji tego kursu zobaczysz wiele przykładów, które pomogą Ci w codziennej pracy a niekiedy nawet, pozwolą uniknąć błędów, których konsekwencje nie zawsze występują natychmiast.
Kurs powstał z myślą o osobach, które chcą rozwijać się w roli full-stack web developera / developerki, przeprowadzając przez najważniejsze zagadnienia z obszaru wymiany, transformacji oraz przechowywania informacji w aplikacji oraz pomiędzy aplikacjami. Jeżeli potrzebujesz zobaczyć szeroką perspektywę tego, w jaki sposób dane przepływają pomiędzy różnymi częściami aplikacji, lub ugruntować swoją wiedzę na ten temat, to ten kurs jest miejscem, którego szukasz.
W tej lekcji przyjrzymy się bliżej pierwszemu sposobowi uwierzytelnienia.
W naszym przypadku przygotowałem sobie
aplikację, która wykorzystuje middleware o nazwie Passport,
czyli znany i lubiany mechanizm wykorzystywany właśnie do tego, aby
tworzyć uwierzytelnienia na różne popularne sposoby.
Zacznijmy jednak od tego, że w naszym
kontrolerze mamy zdefiniowany jeden endpoint, który chroniony jest specjalnym
dekorator, który możemy oczywiście przypisać albo w tym miejscu, albo
bezpośrednio do całego kontrolera i tym samym będzie on uwzględniany w przypadku
każdej metody zdefiniowanej wewnątrz danego kontrolera.
W każdym razie, jeżeli chodzi o ten konkretny przypadek, wygląda to tak, że za
każdym razem, gdy wyślemy zapytanie na ten endpoint, w pierwszej kolejności zostanie
uruchomiony ten gadżet, inaczej mówiąc middleware.
Jego zadaniem będzie pobranie informacji z pliku
na temat loginu oraz hasła użytkownika oraz zestawienie go z tymi, które zostały
przesłane przez użytkownika razem z zapytaniem.
Sama weryfikacja odbywa się w tym przypadku w związku z tym, że
wykorzystujemy Passport, gdzie jest wewnątrz basics strategii.
Konkretnie mamy tutaj metodę Validation, w przypadku której mamy dostęp do nazwy
użytkownika oraz hasła, które zostaje przesłane z zapytaniem.
Jak widzisz mamy tutaj prosty IF
weryfikujący wprost, czy te informacje są ze sobą zgodne.
Jeżeli tak, przekazujemy true i tym samym
przepuszczamy użytkownika dalej, a w przeciwnym razie wyrzucamy wyjątek i tym
samym użytkownik nie ma dostępu do tego endpoint.
Zatem jeżeli na razie komentujemy sobie
ten gadżet, no to oczywiście w momencie gdy przejdziemy do Insomnia, następnie
prześlemy sobie zapytanie typu get, to naturalnie uzyskamy dostęp do endpoint.
Jeżeli jednak uwzględnię ten gest, no to w tym momencie mamy blokadę Status 401
Auto, ale jeżeli tylko przywrócę odpowiedni nagłówek, dane zostaną
zweryfikowane pomyślnie i mamy status 200 OK oraz dostęp do zasobu.
Co więcej, jeżeli zajrzymy tutaj w Time
Machine, to oczywiście mamy tutaj dostęp do nagłówka Auto Dizajn.
Mało tego, jeżeli skopiuję sobie teraz jego zawartość, a następnie znowu z pomocą
wywołamy rozszerzenie Base64, ale tym razem kod, no to w moim schowku pojawi się
wartość, którą wcześniej zapisaliśmy za pomocą Base64.
Zatem jak widzisz, odczytanie informacji, która jest przesłana tutaj w nagłówku jest
niezwykle proste I właśnie z tego powodu do wykonywania połączeń musisz zawsze
uwzględniać https oraz mieć na uwadze fakt, że taki sposób uwierzytelnienia może
Ci wystarczyć na potrzeby prostych aplikacji.
Ale w przypadku, gdy ważne jest dla Ciebie
bezpieczeństwo, to zdecydowanie lepiej uwzględnić inną metodę uwierzytelnienia.
I teraz na koniec jeszcze dodam, że jeżeli
zwrócisz uwagę na to ciastko, to pamiętaj o tym, że ono nie ma nic wspólnego z naszą
aplikacją, tylko z pozostałymi przykładami, które mam tutaj przygotowane.
W każdym razie jeżeli chodzi o
uwierzytelnienie z pomocą Basic Auth to by było na tyle.
Podsumowując to cały scenariusz polega na tym, aby w jakimś miejscu zapisać sobie
login oraz hasło użytkownika, a następnie napisać logikę.
W moim przypadku z pomocą Password James,
która będzie chronić nasze endpoint poprzez odczytanie nagłówka przesłanego
przez użytkownika i konkretnie loginu oraz hasła, które jest tam przekazane jako
base64, a następnie porównanie go z zawartością pliku i MWI.
Teoretycznie w przypadku bardzo prostych aplikacji logika ta mogłaby być zapisana
bezpośrednio w kontrolerze, ale oczywiście zdecydowanie lepszym pomysłem jest
wykorzystanie middleware, a w przypadku MSG jest garbów, których rola sprowadza
się właśnie do zabezpieczania naszych ścieżek.
Ostatecznie jednak zawsze pamiętaj o tym, aby dodać odpowiedni guard albo
bezpośrednio do metod, albo bezpośrednio do całego kontrolera.
Naturalnie ten gest nie będzie stosowany w end pointach, które nie wymagają
zabezpieczenia i w tym przypadku przykładem takiego endpoint będzie
chociażby ścieżka, z pomocą której użytkownik tworzy nowe konto.
Po prostu na tym etapie niemożliwe byłoby dla niego przygotowanie takiego nagłówka.
Mam nadzieję, że jest to dla Ciebie
logiczne i tym samym też, że w razie gdy będziesz potrzebować naprawdę prostego
sposobu uwierzytelnienia, sięgniesz po BASIC.
A.
Tymczasem jeżeli chodzi o ten temat, to by było na tyle.
W związku z tym zapraszam Cię do kolejnej lekcji.