Buduję system uwierzytelniania przy użyciu Passport.js przy użyciu Easy Node Authentication: Setup i Local tutorial .
Nie wiem, co passport.session()
robi.
Po zabawie z różnymi programami pośredniczącymi zrozumiałem, że express.session()
to właśnie wysyła identyfikator sesji za pośrednictwem plików cookie do klienta, ale nie wiem, co passport.session()
robi i dlaczego jest dodatkowo wymagane express.session()
.
Oto jak skonfigurowałem swoją aplikację:
// Server.js konfiguruje aplikację i konfiguruje serwer WWW
//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);
źródło
Z dokumentacji
i
i
źródło
app.post('/login', passport.authenticate('local'), ...
Chociaż będziesz używać
PassportJs
do sprawdzania poprawności użytkownika jako części adresu URL logowania, nadal potrzebujesz mechanizmu do przechowywania tych informacji o użytkowniku w sesji i pobierania ich przy każdym kolejnym żądaniu (tj. Serializacji / deserializacji użytkownika).W efekcie uwierzytelniasz użytkownika przy każdym żądaniu, nawet jeśli to uwierzytelnienie nie musi wyszukiwać bazy danych ani Oauth, jak w odpowiedzi logowania. Dlatego paszport będzie traktował uwierzytelnianie sesji również jako kolejną strategię uwierzytelniania.
Aby skorzystać z tej strategii - która nosi nazwę
session
, wystarczy użyć prostego skrótu -app.use(passport.session())
. Należy również zauważyć, że ta konkretna strategia będzie wymagać zaimplementowania funkcji serializacji i deserializacji z oczywistych powodów.źródło
Po prostu uwierzytelnia sesję (którą wypełnia
express.session()
). Odpowiada:jak widać w kodzie tutaj:
https://github.com/jaredhanson/passport/blob/42ff63c/lib/authenticator.js#L233
źródło