2016-06-30 8 views
2

req.user nicht zugänglich überall außer seiner Ursprung Funktion zuzugreifen.kann nicht req.user in Passport.js auf Express.js

Ich lese, dass der Pass den Benutzer an jede Anfrage nach der Authentifizierung anfügt.

Ich möchte den Zugriff auf die inneren Seiten durch die URL-Leiste jeden Benutzer stoppen damit die Login-Seite ein Überspringen oder wenn seine Sitzung bereits aktiv ist, muss er auf die Benutzerseite umgeleitet werden. Diese zwei Dinge können nur getan werden, wenn ich Zugang zu req.user in allen Middlewares bekomme.

app.js link

app.js: -

app.post('/',passport.authenticate('local',{failureRedirect: '/'}), 
function(req,res,next){ 
console.log(req.user); //req.user defined here only not in users.js 
res.redirect('/users'); 
}); 

users.js: -

router.get('/users', function(req, res, next) { 
console.log(req.user);//undefined  
res.render('users'); 
}); 

DeserializeUser: -

passport.deserializeUser(function(id, done) { 
db.findById(id, function(err, user) { 
done(err, user); 
console.log(user) //undefined 
}); 
}); 

Antwort

5

Es sieht nicht so aus, als wäre Ihre App zur Unterstützung von Sitzungen eingerichtet. Dies ist im Allgemeinen erforderlich, damit Passport sich an einen angemeldeten Benutzer "erinnert" und req.user auffüllt .

Die häufigste Session-Middleware für Express ist express-session, und es relativ einfach einzurichten.

Für eine schnelle Überprüfung, um zu sehen, ob dies das Problem ist, können Sie die folgenden, um Ihre Anwendung hinzufügen:

app.use(session({ secret: 'super secret' })); 
es

Stellen Sie sicher, fügen vorapp.use(passport.session()).

Wenn das funktioniert, lesen Sie bitte auf, wie ein Session-Speicher zu konfigurieren, und was die verschiedenen anderen Optionen der Session-Middleware sind.

+0

Ja hinzugefügt es funktioniert aber nicht. – Red

+0

Was genau funktioniert nicht, 'req.user' ist nicht definiert? Können Sie die Middleware hinzufügen, die Sie verwenden, um festzustellen, ob sich ein Benutzer bei Ihrer Frage angemeldet hat oder nicht? – robertklep

+0

Ja req.user ist nicht in Routen definiert. In der Frage wurden Schnipsel eingefügt. – Red

0

eine Middleware-Funktion mit diesem erstellen: passport.authenticate('local',{failureRedirect: '/'}) als Inhalt und verwenden Sie es in jeder Route, die Sie authentifizieren möchten. Oder verwenden Sie es in app.use(that_function), um die gesamte App zu authentifizieren

+0

Aber das würde den Benutzernamen Passwort-Authentifizierung auslösen jede-time.If ich bereits den Benutzer authentifiziert haben, dann muss ich nur diese mit req.user in Routen überprüfen. – Red

+0

Nicht, wenn Sie Sitzung für Ihre Anmeldung einrichten. Mit diesem Textvorschlag verstehen [ 'https://github.com/meanjs/mean/tree/v0.3.3'](https://github.com/meanjs/mean/tree/v0.3.3) PS: Scheck nur für die Version 0.3. Passport.js in Config und Strategien, wird Ihnen helfen zu verstehen, –

+0

Hinzugefügt, dass Middleware, aber es gibt mir req.user = null. Irgendetwas Fortschritt. – Red