Quel est le sérialiser et désérialiser passeport méthode appelée? En quoi est-il exactement de jeu?
Nous avons deux types d'Utilisateurs, l'Administrateur et les Utilisateurs en général.
passport.serializeUser(function(user, done) {
console.log('Sear');
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
console.log(id);
console.log("Deser");
User.findById(id, function(err, user) {
if(err) done(err);
if(user){
done(null, user);
}else{
vendorUser.findById(id, function(err, user){
if(err) done(err);
done(null,user);
});
}
});
});
De la Console.journal obtient en sortie fréquemment (même sur une simple demande d'API) avec le texte
Deser
Ce faire à la fois les fonctions exactement faire? Une réponse détaillée est apprécié.
TIA.
Vous devez vous connecter pour publier un commentaire.
De sérialisation et de désérialisation sont importants concept. Pour sérialiser un objet de moyens pour la conversion de son état à un flux d'octets, donc, de manière que le flux d'octets peut être repris dans une copie de l'objet.
Dans une application web standard, les informations d'identification utilisées pour authentifier un utilisateur ne seront transmises lors de la demande de connexion. Si l'authentification réussit, une session sera établi et maintenu par l'intermédiaire d'un cookie défini dans le navigateur de l'utilisateur.
Chaque demande ultérieure, ne contiennent pas d'informations d'identification, mais plutôt de cookie unique qui identifie la session. Afin de soutenir les sessions de connexion, Passeport va sérialiser et désérialiser des instances d'utilisateur et à partir de la session.
Dans le code que vous avez écrit, uniquement le nom d'utilisateur est sérialisé à la session. Lorsque les demandes sont reçues, cet ID est utilisé pour trouver à l'utilisateur, qui sera restauré à
req.user
.Pour donner aux développeurs la liberté de l'utilisateur, selon la base de données qu'ils veulent, ce que les données qu'ils veulent pour sérialiser, ils peuvent le faire à leur manière, la sérialisation et la désérialisation logique est laissé à nous de les mettre en œuvre.
user.id
viennent? Dans la plupart des mangoustes, des modèles que je vois pour les utilisateurs il y a des domaines comme:_id
,name
,password
etc. Ce sont les lettresid
arbitraire. puis-je utiliserdone(null, user.cat);
?_id
je pense juste que c'est bizarre dans la documentation pour les passeports et les tutoriels qu'ils utilisent le plus souventuser.id
et il n'y a pas deid
champ dans le document . Comprenez-vous pourquoi je pense que c'est bizarre? et aussi, ce qui implique qu'au lieu d'utiliseruser.id
je peux utiliserdone(null, **user**);
juste de l'utilisateur? ou peut-êtreuser.name
si il y a un nom de domaine.serializeUser
est la méthode qui est appelée sur la demande de connexion(au moment de l'authentification) et si la connexion est réussie, alors il décide quelles informations de l'utilisateur doit obtenir stockées dans la session et à l'envoi d'un cookie sur le navigateur pour la même pour maintenir la session.L'extrait ci-dessus permettra d'économiser de l'utilisateur.champ id de la session et cookie.
deserializeUser
est la méthode qui est appelée à toute demande ultérieure, et est appelé par lepassport.session
middleware. Il nous permet de charger d'autres informations de l'utilisateur à chaque requête. Cet objet utilisateur est joint à la requête req.l'utilisateur qui le rend accessible dans notre traitement de la demande.Voici l'article qui l'explique flux très bien