Estoy construyendo un sistema de autenticación usando Passport.js usando Easy Node Authentication: Setup and Local tutorial .
Estoy confundido acerca de lo que passport.session()
hace.
Después de jugar con los diferentes middleware, llegué a comprender que express.session()
es lo que envía una ID de sesión a través de cookies al cliente, pero estoy confundido acerca de lo que passport.session()
hace y por qué se requiere además de express.session()
.
Así es como configuro mi aplicación:
// Server.js configura la aplicación y configura el servidor 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);
fuente
De la documentación
y
y
fuente
app.post('/login', passport.authenticate('local'), ...
Mientras estarás usando
PassportJs
para validar al usuario como parte de su URL de inicio de sesión, aún necesita algún mecanismo para almacenar esta información de usuario en la sesión y recuperarla con cada solicitud posterior (es decir, serializar / deserializar el usuario).Entonces, en efecto, está autenticando al usuario con cada solicitud, aunque esta autenticación no necesita buscar una base de datos u oauth como en la respuesta de inicio de sesión. Por lo tanto, el pasaporte tratará la autenticación de sesión también como otra estrategia de autenticación.
Y para usar esta estrategia, que se nombra
session
, simplemente use un atajo simpleapp.use(passport.session())
. También tenga en cuenta que esta estrategia particular querrá que implemente funciones de serialización y deserialización por razones obvias.fuente
Simplemente autentica la sesión (que está poblada por
express.session()
). Es equivalente a:como se puede ver en el código aquí:
https://github.com/jaredhanson/passport/blob/42ff63c/lib/authenticator.js#L233
fuente