Estou construindo um sistema de autenticação usando o Passport.js usando o Easy Node Authentication: Setup e o tutorial local .
Estou confuso sobre o que passport.session()
faz.
Depois de brincar com o middleware diferente, cheguei a entender que express.session()
é o que envia um ID de sessão através de cookies para o cliente, mas estou confuso sobre o que passport.session()
faz e por que é necessário além disso express.session()
.
Aqui está como eu configuro meu aplicativo:
// Server.js configura o aplicativo e configura o servidor da 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);
fonte
A partir da documentação
e
e
fonte
app.post('/login', passport.authenticate('local'), ...
Enquanto você estiver usando
PassportJs
para validar o usuário como parte do seu URL de login, você ainda precisa de algum mecanismo para armazenar essas informações do usuário na sessão e recuperá-las com cada solicitação subsequente (por exemplo, serializar / desserializar o usuário).Portanto, na verdade, você está autenticando o usuário com todas as solicitações, mesmo que essa autenticação não precise procurar um banco de dados ou oauth como na resposta de login. Portanto, o passaporte tratará a autenticação de sessão também como mais uma estratégia de autenticação.
E para usar essa estratégia - chamada
session
, basta usar um atalho simples -app.use(passport.session())
. Observe também que essa estratégia específica deseja que você implemente funções de serialização e desserialização por razões óbvias.fonte
Simplesmente autentica a sessão (que é preenchida por
express.session()
). É equivalente a:como pode ser visto no código aqui:
https://github.com/jaredhanson/passport/blob/42ff63c/lib/authenticator.js#L233
fonte