2016-04-06 24 views
0

Kimlik doğrulama için pasaport kitaplığını kullanarak bir ekspres düğüm uygulamasında, oturum deposunu MemoryStore'dan connect-couchdb'ye dönüştürüyorum. Giriş sayfası şu anda lapa ladı ve sanırım bunun nedeni yeni oturum depolama alanının bir yarışta vurguladığı kadar yavaş olmasıdır.Oturum açmayı yönlendirmeden önce oturum mağazasının eksiksiz olduğundan emin olun

Pasaportta 'successReturnToOrRedirect: /' seçeneğini kullanıyorum ve 'session set' veri tabanına yazılmadan önce 'session get'/for/oluştu. Bunu onaylamak için connect-couchdb ve pasaport koduyla ekstra kayıt yaptırdım.

Res.Redirect'in pasaporttaki başarının bir parçası olarak çağrılmasından önce req.session.save çağrıldığından ve tamamlandığından emin olmanın bir yolu var mı? Orijinallik() 'e geçirebileceğiniz isteğe bağlı geri çağrı, tüm yerleşik işlemlerin yerini alır, artırılabileceği bir çözüm olmasını umuyordum.

Ayrıca here

cevap

0

Sir yayınlanmıştır, oturum yönetimi için sorumlu bir Ekspres olduğunu ve MemoryStore gibi oturum mağaza eklentisi için gerekli arayüze sahip. Ve req.session.save çok :-)

req.session.save(function(err) { 
    if (err) { 
    // Houston we have a problem 
    return err; 
    } 

    // Session saved 
}) 
+0

Buradaki sorun passport.js kimlik denetimi düşük seviyeli detay ile uğraşan olmasıdır ve bu (başarısına) yönlendirir önce elle req.session.save çağırmak için hiçbir yolu yoktur. Geri arama ile yapılandırabilirsiniz, ancak bu tüm işleyicinin yerini alır. –

+0

Örneğin, https://github.com/jaredhanson/passport/blob/master/lib/middleware/authenticate.js adresinde strategy.success adresine bakın. –

0

Geçici bir olur TÜM yönlendirmeler, benim durumumda çalışmak için önce bir kurtarış oturumu zorlamak için bir geri arama hak dersen. Sahip olduğumuz tek res.redirect pasaportun bir parçasıdır. gibi bir şey:

module.exports = function(req, res, next) { 
    const _redirect = res.redirect; 
    res.redirect = function(args) { 
     if (req.session) { 
      req.session.save(err => { 
       if (err) { 
        // handle error 
       } 
       _redirect.call(res, args); 
      }) 
     } else { 
      _redirect.call(res, args); 
     } 
    } 
} 
İlgili konular