Я создаю систему аутентификации, используя Passport.js, используя Easy Node Authentication: Setup и Local tutorial .
Я не понимаю, что passport.session()
делает.
Поигравшись с различным промежуточным программным обеспечением, я понял, что express.session()
это то, что отправляет идентификатор сеанса через файлы cookie клиенту, но я не понимаю, что passport.session()
делает и почему это требуется в дополнение к express.session()
.
Вот как я настроил свое приложение:
// Server.js настраивает приложение и настраивает веб-сервер
//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);
источник
Из документации
и
и
источник
app.post('/login', passport.authenticate('local'), ...
Хотя вы будете использовать
PassportJs
для проверки пользователя как часть URL-адреса для входа в систему, вам все равно понадобится какой-то механизм для хранения этой информации о пользователе в сеансе и извлечения ее с каждым последующим запросом (т.е. сериализовать / десериализовать пользователя).Таким образом, вы аутентифицируете пользователя с каждым запросом, даже если для этой аутентификации не нужно искать базу данных или oauth, как в ответе на вход. Таким образом, паспорт будет рассматривать аутентификацию сеанса также как еще одну стратегию аутентификации.
И чтобы использовать эту стратегию - которая названа
session
, просто используйте простой ярлык -app.use(passport.session())
. Также обратите внимание, что эта конкретная стратегия потребует от вас реализации функций сериализации и десериализации по очевидным причинам.источник
Он просто аутентифицирует сеанс (который заполняется
express.session()
). Это эквивалентно:как можно увидеть в коде здесь:
https://github.com/jaredhanson/passport/blob/42ff63c/lib/authenticator.js#L233
источник