2012-11-26 31 views
9

Başarılı bir şekilde pasaport JS ile giriş yaptığımda bu hatayı alıyorum. .Passport JS "Üstbilgiler gönderildikten sonra ayarlanamaz"

app.post('/login', 
    passport.authenticate('local', {failureRedirect: '/login' }), 
    function(req, res) { 
    res.redirect('/'); 
    }); 

Tam Hata:

Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (http.js:644:11) 

bir şey eksik ben de öyle

Kanunu log kez ana sayfasına yönlendirmek için çalışıyorsunuz? Bu hatanın neden olduğundan emin değil. Ben hala uygulamayı kullanmak mümkün, ben sadece hata istemiyorum.

cevap

15

Kullanıcıya, serializeUser işlevinin iki kez çağrılması için yönlendiriyorsunuz. Ve

passport.use(new FacebookStrategy({ 
... 

bu başka eklemeyi unutmayın yoksa böylece iki kez başlıkları gönderme ve hataya neden iki defa çağrılır. Bunu deneyin:

passport.use(new FacebookStrategy({ 
... 
}, 
function(accessToken, refreshToken, profile, done) { 
// asynchronous verification, for effect... 
process.nextTick(function() { 

    // To keep the example simple, the user's Facebook profile is returned to 
    // represent the logged-in user. In a typical application, you would want 
    // to associate the Facebook account with a user record in your database, 
    // and return that user instead. 
    User.findByFacebookId({facebookId: profile.id}, function(err, user) { 
     if (err) { return done(err); } 
     if (!user) { 
      //create user User.create... 
      return done(null, createdUser); 
     } else { //add this else 
      return done(null, user); 
     } 
    }); 
    }); 
} 
)); 
+4

Teşekkür ederim, ben done done() iki kez – wesbos

+2

Bunun için teşekkürler. 'Else' 'e ihtiyacınız olduğunu fark etmeden önce çok fazla kafa çiziyordum. Btw güzel kullanıcı adı ve avatar. – electrichead

1

PassportJS guide belgesine göre, katman yazılımlarının tüm yönlendirmeleri yapmasına izin vermeniz gerekir.

app.post('/login', passport.authenticate('local', { successRedirect: '/', 
               failureRedirect: '/login' })); 

Benim tahminim orta katman ve daha sonra yöntem çalışıyor (ne zaman olmamalı next arayarak) Eğer yukarıdaki örnekte olduğu gibi Express' res.redirect yöntemini çağırarak, ama onun uygulanmasında hata var olmasıdır yeniden res.redirect numaralı telefonu aramak ve bu da hataya neden olur çünkü HTTP protokolünde yalnızca bir kez istemciye bir yanıt gönderebilirsiniz.

İlgili konular