Jak wyjaśniłbyś laikowi przepływ pracy serializacji i deserializacji metod Passport.
Dokąd się
user.id
udajepassport.serializeUser
?Dzwonimy
passport.deserializeUser
zaraz po tym, gdzie pasuje do przepływu pracy?// used to serialize the user for the session passport.serializeUser(function(user, done) { done(null, user.id); // where is this user.id going? Are we supposed to access this anywhere? }); // used to deserialize the user passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); });
Wciąż próbuję owinąć wokół niego głowę. Mam kompletną działającą aplikację i nie mam żadnych błędów.
Chciałem tylko zrozumieć, co się tutaj właściwie dzieje?
Każda pomoc jest mile widziana.
user.id
zapisywany jakoreq.session.passport.user
lubuser
sam jest przechowywany jakoreq.session.passport.user
req.session.passport.user = {id: '..'}
część diagramu jest nieco wyłączona i powinna byćreq.session.passport.user = 785352
zamiast tego, gdzie785352
jestuser.id
. Mam problem z zalogowaniem się do konsoli, aby to udowodnić, ale wygląda na to, że miałoby to sens. Kiedy dzwoniszdone(null, user.id);
, warto wziąć drugi argument -user.id
w tym przypadku - i przypisać goreq.session.passport.user
, zamiast przypisywać goreq.session.passport.user.id
. Bo co jeśli zamiast tego przejdzieszuser
?req.sesssion.passport.user.id = user
nie miałoby sensuDla każdego, kto używa Koa i paszportu koa :
Wiedz, że klucz dla zestawu użytkowników w metodzie serializeUser (często unikalny identyfikator dla tego użytkownika) będzie przechowywany w:
this.session.passport.user
Po ustawieniu w
done(null, user)
deserializeUser, gdzie „użytkownik” to jakiś obiekt użytkownika z bazy danych:this.req.user
LUBthis.passport.user
z jakiegoś powodu
this.user
kontekst Koa nigdy nie jest ustawiany, gdy wywołasz metodę done (null, user) w metodzie deserializeUser.Możesz więc napisać własne oprogramowanie pośrednie po wywołaniu app.use (passport.session ()), aby umieścić je w this.user w następujący sposób:
Jeśli nie masz pewności, jak działa serializeUser i deserializeUser, po prostu uderz mnie na Twitterze. @yvanscher
źródło