sql >> Databáze >  >> NoSQL >> Redis

Implementuji serializaci a deserializaci NodesJS + Passport + RedisStore?

Pokud používáte relace musíte poskytnout pas s funkcí serializace a deserializace. Implementace Redis jako úložiště relací nemá nic společného s tím, jak byl pas implementován, zabývá se pouze tím, kde jsou uložena data relace.

Provádění relací s pasem

Jak jsem řekl, funkce serializace a deserializace musí být poskytnuty pasu, aby relace fungovaly.

Účel serializovat funkcí je vrátit dostatečné identifikační informace k obnovení uživatelského účtu při jakýchkoli následných požadavcích. Konkrétně druhý parametr done() metoda je informace serializovaná do dat relace .

deserializovat funkce, kterou poskytujete, je určena k vrácení uživatelského profilu na základě identifikačních informací, které byly serializovány do relace .

Zde je příklad z Passport Guide v sekci diskutujících o relacích:

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});

Ve výše uvedeném příkladu passport.serializeUser() je poskytována funkce, která přebírá dva parametry, uživatelský profil (user ) a funkci zpětného volání (done ). Funkce zpětného volání přebírá jako druhý parametr identifikační informace (user.id , ale pokud používáte mongoDB, může to být user._id ) nutné k obnovení účtu z databáze. To bude vyvoláno při každém ověřeném požadavku a uloží identifikační informace v datech relace (ať už v souboru cookie nebo ve vašem obchodě Redis).

passport.deserializeUser() je poskytována funkce, která také přebírá dva parametry, identifikační informace (id ) a opět funkce zpětného volání (done ). Identifikační informace jsou ty, které byly serializovány do dat relace v předchozím požadavku (user.id ). Funkce zpětného volání zde vyžaduje uživatelský profil jako druhý parametr nebo jakákoli chyba při načítání profilu jako jeho první parametr. User.findById() Funkce je vyhledávací funkce pro uživatelský profil v databázi. V tomto příkladu User object je instancí modelu mongoose, který má findById() funkce.

Funkce poskytnutá passport.deserializeUser() je voláno passport middleware, passport.session() před zpracováním trasy k uložení uživatelského profilu (user ) na req.user .

Implementace Redis jako úložiště relací

Účelem použití Redis je ukládat data relace na straně serveru, takže jediná data uložená na straně klienta je id relace. Opět je to nezávislé na tom, jak jste pas implementovali, pasu je jedno, kde jsou data relace uložena, pokud jste do své aplikace přidali podporu relace. Tato předchozí otázka o stackoverflow se týká toho, jak implementovat Redis



  1. Jak můžete odstranit všechny dokumenty ze sbírky pomocí Mongoose?

  2. MongoDB jako úložiště souborů

  3. 6 nejlepších technik optimalizace práce MapReduce

  4. java.lang.NoClassDefFoundError při použití ovladače MongoDB