2014-06-11 15 views
7

Benim passport.js yapılandırma böylece şöyledir:Passport.js req.login istemek için kullanıcı geçirmeden değil()

const Local = require("passport-local").Strategy; 
const USMODEL = require("../models/user.js"); 
passport.serializeUser(function(user, done) { 
    console.log("SERIALIZING USER"); 
    done(null, user.id); 
}); 
passport.deserializeUser(function(id, done) { 
    console.log("DESUSER", id); 
    var US = mongoose.model("RegUser", USMODEL); 
    US.findById(id, function(err, user) { 
     done(err, id); 
    }); 
}); 
passport.use("local-login", new Local({ 
    usernameField: "email", 
    passwordField: "password", 
    passReqToCallback: true 

},function(req, email, password, done) { 
    var US = mongoose.model("RegUser", USMODEL); 
    US.findOne({"email": email}, function(err, user){ 
     if(err) throw err; 
     if(!user) return done(null, false); 
     if(!user.validPassword(password)) { 
      console.log("password not valid"); 
      return done(null, false); 
     } 
     return done(null, user); 
    }); 
})); 

Birden koleksiyonları ile hokkabazlık çünkü her işlevin içinde firavunfaresi modeli değiştiriyorum Bir anda neler olup bittiğini tam olarak kontrol etmeyi seviyorum.

Benim router.js dosya pasaport katman faydalanmak aşağıdaki yolları vardır:

app.get("/user/login", function(req, res) { 
    res.render("signin"); 
}); 
app.post('/user/login', function (req, res){ 
    passport.authenticate('local-login', function(err, user, info){ 
     if (err) return res.redirect("/"); 
     if (!user) return res.redirect('/'); 

     else { 
      req.login(user, function(err) { 
       if (err) return next(err); 
       console.log("Request Login supossedly successful."); 
       return res.redirect('/admin/filter'); 
      }); 
     } 
    })(req, res); 
}); 

Hangi başarılı bir yetkilendirme durumunda, bu nedenle böyle gider aynı yönlendirici içinde/yönetici/filtreye yönlendirir.

app.get("/admin/filter", isLoggedIn, function(req, res){ 
//rendering stuff here 
}); 

Şimdi, yönetici/filtre isteği teorisi benim son noktalarını korur içinde, isLoggedIn denilen bir katman geçmiş gider. O kadar şöyledir:

function isLoggedIn(req, res, next) { 
console.log("This is the authentication middleware, is req authenticated?"); 
console.log(req.isAuthenticated()); 
console.log("Does req.user exist?") 
console.log(req.user); 
return next(); 
} 

Şimdi, ben req.login aradım ve seçim benim son nokta yönlendirildi var çünkü, istek doğrulanmış olacağını beklenebilir. Durum bu değil.

Request Login supossedly successful. 
This is the authentication middleware, is req authenticated? 
false 
Does req.user exist? 
undefined 

Sorunumun kaynağını bulamıyorum. Her şey, strateji çağrılırken, geri çağırma işlevi ve teoride req.user nesnesinde veri bulunan req.login nesnesini denetler. Gözlemlediğim garip bir şey, passport.deserializeUser() yöntemini göremiyorum. Hiç. Fakat bu sorun için teğet olabilir. Passport kesinlikle stratejimi kullanıyor ve bir kullanıcı nesnesi oluşturuyor, ancak bir şekilde bu aynı nesne talebe girmiyor. Neler olduğu hakkında herhangi bir öneriniz veya fikrin var mı?

+0

Ayrıca '' ('pasaport') 'gerektirir mi? ya da pasaport-yerel 'bununla ilgileniyor - pasaportu sıfırdan kurdum ve bir noktada benzer sorunları vardı - sorunun ne olduğunu hatırlamaya çalışıyorum. – ewizard

+0

0 reh.login (user ... 'yı, – ewizard

+0

numaralı telefonun sonundaki geri çağırma işlevinde passport.js dosyasında çalıştırmayı deneyin. @ewizard pasaport-local, yalnızca stratejiyi içerdiği için pasaport kullanımını gerektirir. –

cevap

4

Bu sorunu, Passport ara katmanını nasıl kullanacağımı ilk öğrendiğimde başlattığım eğiticiyi kullanarak hokkabazlık yaparak çözdüm. Ben konfigürasyon yanlış yaptığını çıkıyor: Sunucu dosyasında bu gibi olmak için kullanılan Kodum:

pass = require("passport"); 
app.use(pass.initialize()); 
app.use(pass.session()); 
require("./app/config/passport.js")(pass); 

bu olmalıydı zaman:

pass = require("passport"); 
require("./app/config/passport.js")(pass); 
app.use(pass.initialize()); 
app.use(pass.session()); 

Ya belgelerinde yer cevapsız konfigürasyonun başlatmadan önce gelmesi gerektiği belirtiliyor ya da basitçe söylemek gerekirse önemsiz bir şey olarak yazılıyor. Her iki şekilde de problemimi çözdüm.

+0

Hayır, önceki sipariş doğru veya sipariş önemli değil: https://github.com/tutsplus/passport-social/blob/master/app.js#L41 – derek

İlgili konular