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.
I teraz przechodzimy do ostatniego, według mnie bardzo istotnego, aczkolwiek często
ignorowany sposobu uwierzytelnienia opartego o sesje oraz ciastka tzw.
session kuki.
W przypadku Nestle jest.
Trzeba przyznać, że trzeba się trochę namęczyć, aby uzyskać taki mechanizm i
szczerze mówiąc nie będziemy przez niego krok po kroku przechodzić.
Jednocześnie warto jednak uwzględnić fakt,
że w wielu przypadkach w momencie, gdy masz do czynienia z klasycznym front endem
oraz backend, zdecydowanie dobrym pomysłem jest wykorzystanie session kuki.
W tej sytuacji, analogicznie jak w
przypadku tokenów, zasada jest bardzo podobna.
Użytkownik loguje się loginem oraz hasłem za pomocą Big Crypt porównujemy hash
zapisane w bazie danych i w momencie gdy się zgadzają oraz oczywiście gdy
użytkownik istnieje, zwracamy Session Kuki, które jest ustawione przez serwer, a
sama sesja zapisana właśnie na tym serwerze, a następnie przeglądarka dba o
to, aby to Session Kuki trafiło z każdym kolejnym zapytaniem do naszego serwera.
Zatem przejdźmy teraz do kodu.
Uruchomimy aplikację, włączmy serwer, no i
przechodzimy do sprawdzenia co tutaj dokładnie przygotowałem.
Mianowicie podobnie jak w poprzednim przypadku mamy tutaj end pointy
umożliwiające zarejestrowanie konta, zalogowanie, dostęp do zabezpieczonej
ścieżki oraz w tym przypadku możliwość wylogowania.
Co ciekawe, zaimplementowanie mechanizmu
wylogowania nie jest wcale takie oczywiste w przypadku tokenów jw.
W każdym razie jeżeli chodzi o możliwość rejestracji użytkownika, jest ona tak
naprawdę bliźniacza jak do tej, którą omawialiśmy przy okazji tokenów od WT.
Po prostu użytkownik przesyła login oraz hasło, a następnie odbieramy te dane,
szyfruje hasło i wrzucamy je do naszej bazy.
Z powrotem przesyłamy informacje na temat użytkownika.
W tym przypadku jednak, już pomijając
informacje na temat samego hasła, pamiętaj proszę o tym, aby zwracać uwagę, aby nie
przesyłać takich informacji z powrotem do klienta.
Proponuję więc, abyśmy spróbowali
zalogować się wykorzystując metodę Signal i przekazując tutaj dane użytkownika.
W tym przypadku wykorzystam tutaj tylko
nazwę Oferent 1 i mamy tutaj informację o tym, że konto zostało utworzone.
Następnie możemy wykorzystać ten login
oraz hasło do tego, aby zalogować się do naszego konta.
W momencie gdy to zrobimy zwróć uwagę, że mamy tutaj stosowną odpowiedź, ale
dodatkowo pojawiło się tutaj również ciasteczko.
Ciasteczko to zawiera informacje na temat
sesji i tym samym też w momencie, gdy będziemy próbowali dostać się do ścieżki
dostępnej tylko dla zalogowanych użytkowników, to w związku z tym, że mamy
to ciastko, otrzymamy tutaj poprawną odpowiedź.
Co więcej, ta odpowiedź powiązana jest bezpośrednio z zalogowanym użytkownikiem.
Oczywiście w przypadku zapytania GET po prostu zignoruj to co mamy.
Tutaj nie przesyłamy żadnego ciała zapytania.
W każdym razie wszystko się tutaj zgadza.
W związku z tym możemy wylogować się, no i ciasteczko zostanie w tym momencie
zniszczone, podobnie jak sesja i tym samym też, gdy będziemy próbowali uzyskać dostęp
do chronionego zasobu, tym razem otrzymamy status 403.
Wszystko się tutaj zgadza, mechanizm
działa, a my jedyne co musimy zrobić, to zastosować local strategii, który
wykorzystujemy właśnie na etapie logowania użytkownika, czyli dokładnie tutaj, ale
już w momencie, gdy mamy endpoint, który chcemy chronić naszą sesją, no to
wykorzystujemy authentication, który zapisany jest dokładnie w tym miejscu.
Zwróć uwagę, że w tym miejscu już nie wykorzystujemy password.
Czy jest tylko konkretnie metody dostępne w paczce Express Sessions?
W związku z tym, jak widzisz nawet nie
mamy tutaj zbytnio powiązania z tym czy jest, tylko wykorzystujemy pakiet dla
Express, gdzie jest do tego, aby obsługiwać sobie sesję.
Na koniec dnia jeszcze to, co nas będzie tutaj interesowało to to, aby w naszym
głównym pliku aplikacji skonfigurować sobie odpowiednio to rozszerzenie.
I tutaj, podobnie jak w przypadku tokenów
WT, wykorzystujemy Secret Token, które możesz wygenerować analogicznie jak
wcześniej poleceniem, które wyświetla się w tym momencie w mojej konsoli.
Zatem myślę, że na tym etapie sam
mechanizm jest dla Ciebie jasny, ponieważ tak naprawdę po jego konfiguracji, która
dzieje się tutaj, tak naprawdę jedyne co musisz zrobić, to utworzyć sobie bardzo
prosty graf, a następnie podłączać go do swoich end pointów.
Cała reszta dzieje się dla Ciebie
automatycznie, no bo w momencie gdy użytkownik zaloguje się do swojego konta i
tylko musimy aktywować ponownie serwer, no to jego ciastko zostanie utworzone i tym
samym też nie musimy w żaden sposób przekazywać go z kolejnymi zapytaniami ze
względu na to, że o to dba już nasza przeglądarka, a jednocześnie też serwer.
A z kolei serwer dba o to, aby weryfikować
te sesje, a w momencie gdy sesja wygaśnie np.
po stronie serwera lub też np.
w momencie gdy serwer zostanie w tym przypadku wyłączony oraz włączony
ponownie, to nie będziemy mieć dostępu do naszego zasobu.
Wynika to z faktu, że sesje w tym
przypadku przechowywane są w pamięci serwera, a co za tym idzie w momencie jego
restartu wszystkie te informacje są tracone.
Oczywiście nic nie stoi na przeszkodzie, aby przechowywać sesje np.
w plikach bądź w bazie danych.
Aczkolwiek znowu tutaj chodzi tylko o to, aby było dla Ciebie jasne, że istnieje
możliwość przechowywania sesji w sposób bardziej.
A już to, czy faktycznie z takiego sposobu
skorzystasz zależy tylko od Ciebie oraz Twoich potrzeb.
Jeżeli chodzi o uwierzytelnianie za pomocą sesji, to by było na tyle.
W związku z tym dziękuję za uwagę i do usłyszenia w kolejnych materiałach.