Zrozumienie passport serialize deserialize
Jak wyjaśniłbyś laikowi proces serializacji i deserializacji paszportu?
Gdzie jest
user.id
po wywołaniupassport.serializeUser
?-
Wywołujemy
passport.deserializeUser
zaraz po nim, gdzie mieści się w obiegu 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); }); });
2 answers
- gdzie user.id idź po paszport.serializeUser został wywołany?
Identyfikator użytkownika (podany jako drugi argument funkcji done
) jest zapisywany w sesji, a następnie używany do pobierania całego obiektu za pomocą funkcji deserializeUser
.
serializeUser
określa, które DANE obiektu Użytkownika mają być przechowywane w sesji. Wynik metody serializeUser jest dołączony do sesji jako req.session.passport.user = {}
. Tutaj na przykład, byłoby (jak my podaj identyfikator użytkownika jako klucz) req.session.passport.user = {id:'xyz'}
Dzwonimy do Paszportu.deserializeUser zaraz po nim gdzie mieści się w obiegu pracy?
Pierwszy argument deserializeUser
odpowiada kluczowi obiektu user, który został podany funkcji done
(Patrz 1.). Więc cały twój obiekt jest odzyskiwany za pomocą tego klucza. Tym kluczem jest tutaj identyfikator użytkownika (kluczem może być dowolny klucz obiektu user, np. nazwa, email itp.).
W deserializeUser
Ten klucz jest dopasowany do pamięci tablica / baza danych lub dowolny zasób danych.
Pobrany obiekt jest dołączony do obiektu request jako req.user
Przepływ Wzrokowy
passport.serializeUser(function(user, done) {
done(null, user.id);
|
}); |
|
|____________________> saved to session req.session.passport.user = {id:'..'}
|
\|/
passport.deserializeUser(function(id, done) {
________________|
|
\|/
User.findById(id, function(err, user) {
done(err, user);
|______________>user object attaches to the request as req.user
});
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-14 15:11:04
Dla każdego, kto używa Koa i Koa-paszport :
Wiedz, że klucz dla użytkownika ustawiony w metodzie serializeUser (często unikalny identyfikator dla tego użytkownika) będzie przechowywany w:
this.session.passport.user
Gdy ustawisz done(null, user)
w deserializeUser gdzie 'user' jest jakimś obiektem user z twojej bazy danych:
this.req.user
Lub
this.passport.user
Z jakiegoś powodu this.user
kontekst Koa nigdy nie zostanie ustawiony podczas wywołania done (null, user) w metodzie deserializeUser.
Więc możesz napisać swój własny middleware po wezwaniu do aplikacji.użycie (bułg.session ()) aby umieścić go w tym.user like so:
app.use(function * setUserInContext (next) {
this.user = this.req.user
yield next
})
Jeśli nie wiesz, jak działają serializeUser i deserializeUser, po prostu skontaktuj się ze mną na Twitterze. @ yvanscher
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-18 21:12:58