Como você explicaria o fluxo de trabalho dos métodos de serialização e desserialização do Passport para um leigo.
Para onde
user.id
vai depoispassport.serializeUser
foi chamado?Estamos ligando
passport.deserializeUser
logo depois para onde ele se encaixa no fluxo de trabalho?// 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); }); });
Eu ainda estou tentando envolver minha cabeça em torno disso. Eu tenho um aplicativo de trabalho completo e não estou encontrando erros de qualquer tipo.
Eu só queria entender o que exatamente está acontecendo aqui?
Qualquer ajuda é apreciada.
user.id
salvo comoreq.session.passport.user
ou éuser
em si armazenado comoreq.session.passport.user
req.session.passport.user = {id: '..'}
parte do diagrama está ligeiramente desligada ereq.session.passport.user = 785352
, em vez disso, deve estar onde785352
estáuser.id
. Estou tendo problemas para fazer logon no console para provar isso, mas parece que faria sentido. Quando você telefonadone(null, user.id);
, faria sentido usar o segundo argumento -user.id
nesse caso - e atribuí-lo areq.session.passport.user
, em vez de atribuí-loreq.session.passport.user.id
. Porque e se você passar em vez dissouser
?req.sesssion.passport.user.id = user
não faria sentido.Para quem usa o Koa e o passaporte koa :
Saiba que a chave do usuário definida no método serializeUser (geralmente um ID exclusivo para esse usuário) será armazenada em:
this.session.passport.user
Quando você define
done(null, user)
deserializeUser, em que 'user' é um objeto de usuário do seu banco de dados:this.req.user
OUthis.passport.user
por algum motivo, o
this.user
contexto Koa nunca é definido quando você conclui (nulo, usuário) no seu método deserializeUser.Portanto, você pode escrever seu próprio middleware após a chamada para app.use (passport.session ()) para colocá-lo neste this.user da seguinte maneira:
Se você não sabe ao certo como o serializeUser e o desserializeUser funcionam, basta acessar o twitter. @yvanscher
fonte