Kiedy Twoja aplikacja internetowa musi „zapamiętać” użytkowników, zazwyczaj korzysta z jednego z dwóch mechanizmów: plików cookie lub sesji. Plik cookie to niewielki obszar przechowywania w przeglądarce, w którym można przechowywać dane dotyczące użytkownika, takie jak na przykład preferencje wyszukiwania. Sesje umożliwiają zamiast tego przechowywanie poufnych informacji na serwerze.

Dowiedz się, jak skonfigurować sesje na serwerze Express obsługiwanym przez Node.js.

Co będziesz potrzebował

Aby postępować zgodnie z tym samouczkiem, musisz zainstalować Node.js i npm. Każda najnowsza wersja Node.js powinien przyjść z npm, menedżer pakietów do instalowania zależności.

Użyjesz npm do zainstalowania Express i express-session. To są narzędzia, których będziesz używać do tworzenia serwera WWW i sesji.

Co to jest sesja w Node.js?

Plik cookie to mały plik, którego przeglądarka używa do przechowywania danych. Możesz używać plików cookie do przechowywania niewrażliwych danych, takich jak preferencje wyszukiwania.

Nie należy przechowywać danych wrażliwych (takich jak nazwy użytkownika i hasła) w plikach cookie. Kiedy Twoja przeglądarka wysyła pliki cookie przez HTTP, są one narażone na ataki hakerów, którzy mogą je przechwycić. Są one również przechowywane w postaci zwykłego tekstu na Twoim komputerze, więc hakerzy mogą potencjalnie je sprawdzić i ukraść Twoje dane.

Zamiast zapisywać poufne dane jako plik cookie na kliencie, powinieneś przechowywać je na serwerze. Dzięki temu jest chroniony przed światem zewnętrznym.

Sesje umożliwiają przechowywanie poufnych danych potrzebnych aplikacji do identyfikacji użytkownika. Przykładami są nazwa użytkownika, hasło i adres e-mail. Są bezpieczniejsze, ponieważ znajdują się na serwerze, a nie na kliencie.

Za każdym razem, gdy masz dane, które chcesz utrwalić między żądaniami, zapisz je po stronie serwera przy użyciu sesji. W następnej sekcji dowiesz się, jak utworzyć sesję.

Tworzenie sesji na serwerze Express

Express to popularna platforma internetowa dla Node.js. Pozwala skonfigurować aplikację serwera WWW, która nasłuchuje żądań klientów na wybranym numerze portu. Możesz tworzyć trasy API, stosować oprogramowanie pośredniczące, a nawet łączyć aplikację z bazą danych, a wszystko to dzięki API udostępnianym przez framework.

1. Utwórz projekt Node.js

Utwórz zupełnie nowy folder dla swojego projektu, a następnie uruchom narzędzie wiersza poleceń i przejdź do tego folderu.

Następnie uruchom następujące polecenie, aby zainicjować projekt Node.js:

npm init -y

Spowoduje to wygenerowanie pliku package.json w folderze głównym projektu z domyślną konfiguracją. Plik package.json do uruchomienia skrypty npm.

2. Zainstaluj Express i express-session

Użyjesz Express do utworzenia aplikacji serwera WWW. I sesja ekspresowa do tworzenia sesji w tej aplikacji serwera.

Na terminalu uruchom następujące polecenie, aby zainstalować obie zależności:

npm i ekspresowa sesja ekspresowa

Po zainstalowaniu obu pakietów następnym krokiem byłoby utworzenie serwera.

3. Twórz sesje w aplikacji

Utwórz plik o nazwie App.js w folderze głównym projektu i zaimportuj zależności:

konst ekspres = wymagać('wyrazić')
konst sesja = wymagać(„sesja ekspresowa”)
aplikacja = ekspres()

Następnie zarejestruj oprogramowanie pośredniczące sesji. Podaj obiekt z sekret właściwość (do podpisywania pliku cookie sessionID) i plik cookie.

aplikacja.użyć(
sesja({
sekret: „jakiś sekret”,
ciastko: { maksymalny wiek: 30000 },
saveUninitialized: FAŁSZ,
})
);

Tutaj ustawiasz największy wiek sesji na 30 sekund (30000 milisekundy). Ustawienie saveUnitialized na false jest niezbędne, jeśli masz system logowania. Jeśli tego nie zrobisz, Twój serwer wygeneruje nowy identyfikator sesji za każdym razem, gdy użytkownik wyśle ​​żądanie.

Następnie utwórz trasę logowania, aby zmienić sesję. Gdy użytkownik trafi na tę trasę, oczekujesz, że klient wyśle ​​nazwę użytkownika i hasło w treści żądania. Najpierw uzyskujesz dostęp do tych wartości i sprawdzasz, czy istnieją (i czy użytkownik został uwierzytelniony):

aplikacja.post("/Zaloguj sie", (wymaganie, res) => {
konst { nazwa użytkownika, hasło } = req.body;

Jeśli (Nazwa użytkownika Hasło) {
Jeśli (req.session.authenticated) {
res.json (sesja);
} w przeciwnym razie {
Jeśli (hasło "123") {
req.session.authenticated = PRAWDA;
req.session.user = { nazwa użytkownika };
res.json (wymagana sesja);
} w przeciwnym razie {
res.status(403.json({ wiadomość: "Złe poświadczenia" });
}
}
} w przeciwnym razie {
res.status(403.json({ wiadomość: "Złe poświadczenia" });
}
});

Za pomocą pierwszej instrukcji if wykonujesz fikcyjne sprawdzenie. Ta kontrola ma na celu upewnienie się, że kontynuujesz tylko wtedy, gdy nazwa użytkownika i hasło są obecne.

Następnie sprawdzasz, czy użytkownik jest już uwierzytelniony. Jeśli tak, wyślij sesję z powrotem do klienta. Jeśli nie, ustaw właściwość uwierzytelnioną na wartość true i zapisz nazwę użytkownika w sesji. Następnie odeślij go z powrotem do klienta.

Dzięki powyższemu kodowi serwer zapamięta każdego użytkownika, który wyśle ​​żądanie do serwera. Dzieje się tak, ponieważ uwierzytelnili się i zapisali swoje unikalne dane (nazwę użytkownika i hasło) w sesji.

Uruchom serwer, dodając następujący kod na dole pliku App.js:

aplikacja.słuchaj(3000, () => {
konsola.dziennik(„Serwer działa na porcie 3000”);
});

Aby przetestować tę trasę, użyj klienta interfejsu API, aby wysłać żądanie do utworzonej trasy logowania. Pamiętaj, aby wysłać nazwę użytkownika i hasło w treści żądania. Oto jak wyglądałoby Twoje żądanie API w przypadku korzystania z Rest Client:

POST http://localhost: 3000/login HTTP/1.1
Typ zawartości: "aplikacja/json"
{ nazwa użytkownika: „Kingsley”, hasło: "123"}

Jeśli wszystko pójdzie dobrze, otrzymasz następujący obiekt:

{
"ciastko": {
„oryginalny maksymalny wiek”: 30000,
„Tylko http”: PRAWDA,
"ścieżka": "/"
},
"zalegalizowany": PRAWDA,
"użytkownik": {
"nazwa użytkownika": „Kingsley”,
"hasło": "123"
}
}

Z tym kodem wydarzyły się dwie rzeczy. Najpierw uwierzytelniłeś się na serwerze. Po drugie, sesja ma teraz twoje dane logowania, więc serwer wie teraz, kim jesteś. Za każdym razem, gdy wyślesz nowe żądanie, zostanie ono zapamiętane do momentu wygaśnięcia sesji i usunięcia go przez serwer.

Sesje poprawiają wrażenia użytkownika

Sesje są istotną częścią aplikacji Node.js. Dzieje się tak, ponieważ pozwalają one na zachowanie stanu interakcji między wieloma żądaniami i odpowiedziami. Sesje są szczególnie ważne w przypadku aplikacji wymagających logowania.

Korzystaj z sesji w aplikacji zaplecza, aby śledzić dane specyficzne dla użytkownika. Przykładem takich danych są pozycje dodane przez użytkownika do koszyka.

Bez sesji musiałbyś utrzymywać oddzielny magazyn danych dla każdego użytkownika w aplikacji. Byłoby to nieefektywne i zwiększyłoby złożoność aplikacji.

Express.js upraszcza sesje, routing i nie tylko

Express.js to najpopularniejszy obecnie używany framework sieciowy Node.js. Zapewnia wiele narzędzi i bibliotek do tworzenia aplikacji zaplecza, a biblioteka sesji ekspresowych jest tylko jednym z nich.

Jeśli chcesz używać Node.js do tworzenia backendowych stron internetowych, sprawdź Express.