Ce n'passeport.session() middleware faire?
Je suis la construction d'un système d'authentification à l'aide de Passport.js à l'aide de Facile Nœud d'Authentification: le programme d'Installation et Locales tutoriel.
Je suis confus au sujet de ce passport.session()
n'.
Après avoir joué avec les différents middleware j'en suis venu à comprendre que express.session()
est ce qui envoie un ID de session sur les cookies pour le client, mais je suis confus au sujet de ce passport.session()
fait et pourquoi il est nécessaire, en plus express.session()
.
Voici comment j'ai configuré ma demande:
//Server.js configure l'application et met en place le serveur web
//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);
Vous devez vous connecter pour publier un commentaire.
passport.session()
agit comme un middleware pour modifier la req objet et modifier l '"utilisateur" valeur qui est actuellement l'id de session (à partir du client cookie) dans la vraie désérialisé objet utilisateur.Tandis que les autres réponses de quelques bons points, je pense que certains des détails plus précis pourraient être fournis.
est équivalent à
Où "session" se réfère à la stratégie suivante qui est fourni avec passportJS.
https://github.com/jaredhanson/passport/blob/master/lib/strategies/session.js
Spécifiquement lignes 59-60:
Où elle agit comme un middleware et modifie la valeur de l '"utilisateur" de la propriété dans le req objet pour contenir la désérialisé identité de l'utilisateur. Pour permettre cela fonctionne correctement, vous devez inclure
serializeUser
etdeserializeUser
fonctions dans votre code personnalisé.Cela permettra de trouver le bon utilisateur de la base de données et de le passer comme une fermeture de la variable dans la fonction de rappel
done(err,user);
donc le code ci-dessus dans lepassport.session()
peut remplacer l '"utilisateur" de la valeur dans le registre de l'objet et de le transmettre à la prochaine middleware dans le tas.De la la documentation
et
et
app.post('/login', passport.authenticate('local'), ...
Alors que vous serez en utilisant
PassportJs
pour la validation de l'utilisateur dans le cadre de votre URL de connexion, vous avez encore besoin d'un mécanisme pour stocker ces informations d'utilisateur dans la session, et de la récupérer à chaque requête (c'est à dire sérialiser/désérialiser l'utilisateur).Donc en effet, vous êtes l'authentification de l'utilisateur avec chaque demande, même si cette authentification n'a pas besoin de rechercher une base de données ou oauth comme dans la connexion de réponse. Donc, passeport traiter l'authentification de session aussi encore une autre stratégie d'authentification.
Et à l'utilisation de cette stratégie - qui est nommé
session
, il suffit d'utiliser un simple raccourci -app.use(passport.session())
. Notez également que cette stratégie particulière que vous pour mettre en œuvre sérialiser et désérialiser les fonctions pour des raisons évidentes.Simplement, il authentifie la session (qui est peuplée par
express.session()
). C'est équivalent à:comme on peut le voir dans le code ici:
https://github.com/jaredhanson/passport/blob/master/lib/authenticator.js#L236