2014-12-24 13 views
183

Passport'un serileştirme ve serileştirme yöntemlerinin iş akışını bir iş adamına nasıl açıklarsınız? user.idpassport.serializeUser sonra gidiyorPasaportun anlaşılması seri hale getirme serileştiriyor

  1. adı olmuştur?

  2. passport.deserializeUser iş akışına tam olarak nerede uygun olduğunu hemen sonra arıyoruz?

    // 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); 
        }); 
    }); 
    

Hala başım çevresinde kaydırmak çalışıyorum. Tam bir çalışma uygulamasına sahibim ve herhangi bir türde hataya rastlamıyorum.

Sadece tam olarak burada neler olduğunu anlamak istedim?

Herhangi bir yardım için teşekkür ederiz.

cevap

227
  1. Nerede passport.serializeUser çağrıldıktan sonra gitmek user.id yapar?

kullanıcı kimliği (eğer done fonksiyonun ikinci argüman olarak temin) oturumda kaydedilir ve daha sonra deserializeUser fonksiyonu üzerinden bütün nesneyi almak için kullanılır. Kullanıcı nesnesinin hangi verilerin oturumda saklanması gerektiğini belirler. SerializeUser yönteminin sonucu oturuma req.session.passport.user = {} olarak eklenir. (Biz anahtar olarak kullanıcı kimliği sağlamak gibi) İşte mesela olurdu req.session.passport.user = {id:'xyz'}

  1. Biz nerede iş akışının neresinde hemen sonra passport.deserializeUser aradığınız ?

deserializeUser birinci bağımsız değişkeni done işlevine verildi kullanıcı nesne (1. bakınız) anahtarına karşı gelmektedir. Böylece bütün nesneniz bu anahtar yardımıyla alınır. Buradaki anahtar, kullanıcı kimliğidir (anahtar, kullanıcı nesnesinin herhangi bir anahtarı, yani ad, e-posta vb. Olabilir). deserializeUser'da anahtarın bellek dizisi/veritabanı veya herhangi bir veri kaynağı ile eşleştirilmesi.

kullanıcılarına yönelik önemli ayarlanan Bil ki:

getirilen nesne Koa ve koa-passport kullanan herkes için req.user

Görsel Akış

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 

}); 
    }); 
+1

Yani user.id' req.session.passport.user' 'olarak kaydedilebilir veya kendisi olarak depolanan user'' olan 'olan' – Anubhav

+2

@Anubhav düzenlenmiş bkz diyagram req.session.passport.user' .. –

+2

mantıklı . Teşekkürler – Anubhav

12

olarak istek nesnesine eklenir serializeUser yöntemi (genellikle bu kullanıcı için benzersiz bir kimlik) şu konumda depolanır:

'kullanıcı' senin veritabanından bazı kullanıcı nesne nerede olduğunu deserializeUser içinde done(null, user) belirlenen this.session.passport.user

: Görüşme sırasında nedense this.user Koa bağlam için

this.req.user VEYA this.passport.user

set geçmez deserializeUser yönteminizde tamamlandı (boş, kullanıcı).

Yani çağrı şöyle this.user koymak (passport.session()) app.use için sonra Kendi orta yazabilirsiniz:

app.use(function * setUserInContext (next) { 
    this.user = this.req.user 
    yield next 
}) 

nasıl serializeUser belirsiz iseniz ve deserializeUser iş, sadece beni twitter üzerinde çarptı. @yvanscher

+1

harika ve özlü cevap – trdavidson

+0

Sohbet edebilir miyiz, çok az şüpheler. –

İlgili konular