2016-12-14 4 views
0

Ich bin neu in nodejs, also habe ich versucht, ein Authentifizierungssystem zu machen. Ich habe es nach einem Tutorial implementiert. Um das Benutzerobjekt bei der Authentifizierung abzurufen, müssen Sie es in der Sitzung speichern. Ich habe so durch express-session die Konfiguration wie folgt:Passport - Benutzer ist nicht in Sitzung gespeichert

require('./config/passport')(passport); // pass passport for configuration 

app.use(session({ 
    secret: 'thisisagreatgreatsecretforthesession', 
    resave: true, 
    saveUninitialized: true 
})); 

app.use(morgan('dev')); 
app.use(cookieParser()); 
app.use(bodyParser.urlencoded({ extended : false })); 
app.use(bodyParser.json()); 

app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(flash()); 

app.use(function(req, res, next) { 
    res.locals.user = req.user; 
    next(); 
}); 


var routes = require('./app/routes')(app, passport); 

und dann in Pass konfiguriert I die serialisieren und deserialisieren funktioniert wie folgt:

passport.serializeUser(function(user, done) { 
     done(null, user.id); 
    }); 

passport.deserializeUser(function(id, done) { 
     User.findById(id, function(err, user) { 
      done(err, user); 
     }); 
    }); 

ich versuchte, den Benutzer in der deserializeUser Funktion auf die Konsole und es war richtig. Wenn ich jedoch in der Vorlage user aufgerufen habe, habe ich einen Fehler erhalten, der besagt, dass der Benutzer nicht definiert ist.

Fehle ich etwas anderes in der Konfiguration?

Antwort

0

Sitzungseigenschaften werden standardmäßig nicht für Vorlagen verfügbar gemacht.

Wenn Sie req.user von Vorlagen zugreifen zu können, können Sie eine einfache Express Middleware verwenden, die sie aussetzen:

app.use(function(req, res, next) { 
    res.locals.user = req.user; 
    next(); 
}); 

(stellen Sie sicher, dass diese Middleware nach die session und Passmiddle hinzugefügt wird, aber vor alle Routen, die Vorlagen machen, die user zugreifen, mit Express, die Reihenfolge, in der Middleware erfassten Angelegenheiten)

Dies verwendet res.locals als eine Möglichkeit, Daten allen Vorlagen zur Verfügung zu stellen. Wenn Sie sich die Express-Dokumentation ansehen, zeigt sie fast genau den gleichen Code wie ein Beispiel für die Bereitstellung der Benutzerdaten.

+0

Ich bekomme jetzt keine Fehler aber immer noch nichts wird in der Vorlage angezeigt, wenn ich 'user' benutze. Ist die Reihenfolge der Konfiguration bisher korrekt? – omarsafwany

+0

Wenn keine Fehler auftreten, kann die Vorlage auf "Benutzer" zugreifen. Sie können 'console.log (req.user)' innerhalb der Middleware hinzufügen, um sicherzustellen, dass es tatsächlich einen Wert hat (es ist höchstwahrscheinlich ein Objekt, von dem Sie Eigenschaften in Ihrer Vorlage verwenden müssen, wie 'user.username' oder so ähnlich). – robertklep

+0

'console.log (req.user)' funktioniert gut, aber in der Vorlage, wenn ich '<% user.name%>' verwende, bekomme ich gar nichts – omarsafwany

Verwandte Themen