Ich erstelle ein Authentifizierungssystem mit Passport.js mithilfe der einfachen Knotenauthentifizierung: Setup und lokales Lernprogramm .
Ich bin verwirrt darüber, was passport.session()
tut.
Nachdem ich mit der verschiedenen Middleware express.session()
herumgespielt hatte, wurde mir passport.session()
klar , dass dies eine Sitzungs-ID über Cookies an den Client sendet, aber ich bin verwirrt darüber, was dies tut und warum es zusätzlich erforderlich ist express.session()
.
So richte ich meine Anwendung ein:
// Server.js konfiguriert die Anwendung und richtet den Webserver ein
//importing our modules
var express = require('express');
var app = express();
var port = process.env.PORT || 8080;
var mongoose = require('mongoose');
var passport = require('passport');
var flash = require('connect-flash');
var configDB = require('./config/database.js');
//Configuration of Databse and App
mongoose.connect(configDB.url); //connect to our database
require('./config/passport')(passport); //pass passport for configuration
app.configure(function() {
//set up our express application
app.use(express.logger('dev')); //log every request to the console
app.use(express.cookieParser()); //read cookies (needed for auth)
app.use(express.bodyParser()); //get info from html forms
app.set('view engine', 'ejs'); //set up ejs for templating
//configuration for passport
app.use(express.session({ secret: 'olhosvermelhoseasenhaclassica', maxAge:null })); //session secret
app.use(passport.initialize());
app.use(passport.session()); //persistent login session
app.use(flash()); //use connect-flash for flash messages stored in session
});
//Set up routes
require('./app/routes.js')(app, passport);
//launch
app.listen(port);
console.log("Server listening on port" + port);
quelle
Aus der Dokumentation
und
und
quelle
app.post('/login', passport.authenticate('local'), ...
Während Sie
PassportJs
den Benutzer als Teil Ihrer Anmelde-URL validieren, benötigen Sie noch einen Mechanismus, um diese Benutzerinformationen in der Sitzung zu speichern und bei jeder nachfolgenden Anforderung abzurufen (dh den Benutzer zu serialisieren / deserialisieren).Tatsächlich authentifizieren Sie den Benutzer bei jeder Anforderung, obwohl diese Authentifizierung nicht wie in der Anmeldeantwort nach einer Datenbank oder einem anderen suchen muss. Passport behandelt die Sitzungsauthentifizierung daher auch als eine weitere Authentifizierungsstrategie.
Und um diese Strategie zu verwenden - die benannt ist
session
, verwenden Sie einfach eine einfache Verknüpfung -app.use(passport.session())
. Beachten Sie auch, dass Sie mit dieser speziellen Strategie aus offensichtlichen Gründen Serialisierungs- und Deserialisierungsfunktionen implementieren müssen.quelle
Es authentifiziert einfach die Sitzung (die von gefüllt wird
express.session()
). Es ist äquivalent zu:wie im Code hier zu sehen ist:
https://github.com/jaredhanson/passport/blob/42ff63c/lib/authenticator.js#L233
quelle