Jeśli używasz sesji musisz podać paszport z funkcją serializacji i deserializacji. Wdrożenie Redis jako magazynu sesji nie ma nic wspólnego z implementacją paszportu, dotyczy tylko miejsca przechowywania danych sesji.
Realizacja sesji z paszportem
Jak powiedziałem, funkcje serializacji i deserializacji muszą być dostarczone do paszportu, aby sesje działały.
Cel serializacji Funkcja polega na zwróceniu wystarczających informacji identyfikujących w celu odzyskania konta użytkownika przy kolejnych żądaniach. W szczególności drugi parametr done()
metoda to informacja zserializowana do danych sesji .
deserializacja funkcja, którą podajesz, ma na celu zwrócenie profilu użytkownika na podstawie informacji identyfikujących, które zostały zserializowane do sesji .
Oto przykład z Przewodnika paszportowego w sekcji omawiającej sesje:
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
W powyższym przykładzie passport.serializeUser()
dostarczana jest funkcja, która przyjmuje dwa parametry, profil użytkownika (user
) i funkcję zwrotną (done
). Funkcja callback przyjmuje jako drugi parametr informacje identyfikujące (user.id
, ale jeśli używasz mongoDB, może to być user._id
) wymagane do odzyskania konta z bazy danych. Będzie to wywoływane przy każdym uwierzytelnionym żądaniu i przechowuje informacje identyfikujące w danych sesji (czy to w pliku cookie, czy w sklepie Redis).
passport.deserializeUser()
dostarczana jest funkcja, która również przyjmuje dwa parametry, informacje identyfikujące (id
) i ponownie funkcja zwrotna (done
). Informacje identyfikujące to te, które zostały zserializowane do danych sesji w poprzednim żądaniu (user.id
). W tym przypadku funkcja wywołania zwrotnego wymaga profilu użytkownika jako drugiego parametru lub dowolnego błędu podczas pobierania profilu jako pierwszego parametru. User.findById()
function to funkcja wyszukiwania profilu użytkownika w bazie danych. W tym przykładzie User
obiekt jest instancją modelu mangusty, który ma funkcję findById()
funkcja.
Funkcja dostarczona do passport.deserializeUser()
jest wywoływana przez oprogramowanie pośredniczące paszportu, passport.session()
przed obsługą trasy, aby zapisać profil użytkownika (user
) do req.user
.
Wdrażanie Redis jako sklepu sesyjnego
Celem korzystania z Redis jest przechowywanie danych sesji po stronie serwera, więc jedynymi danymi przechowywanymi po stronie klienta jest identyfikator sesji. Ponownie, jest to niezależne od tego, w jaki sposób zaimplementowałeś paszport, paszport nie ma znaczenia, gdzie przechowywane są dane sesji, o ile dodałeś obsługę sesji do swojej aplikacji. To poprzednie pytanie dotyczące przepełnienia stosu dotyczy sposobu implementacji Redis