Passport использует промежуточное программное обеспечение для управления настойчивые пользовательских сессий на стороне сервера и методы синтаксического анализа и обеспечения пользователей запрашивать информацию:
app.configure(function() {
app.use(express.static('public'));
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
});
Если вы используете встроенную localstrategy Паспорта, пользователи информации (имя пользователя/пароль) будет передаваться только при первоначальном POST. В случае успеха информация о пользователях может сохраняться в сеансе на сервере для последующей проверки. В моих приложениях Backbone я использовал JSON Web Tokens express-jwt для хранения (а не информации пользователя, а только идентификатора сеанса) только идентификатор сеанса на клиенте. JWT позволяет вам определить секрет сеанса для шифрования файла cookie X-auth и сохранения этого файла cookie на клиенте. Затем на стороне клиента, вы можете прикрепить функцию к событию ajaxSend передавать кук всех последующих запросов:
$(document).ajaxSend(function(event, request) {
var token = readCookie('token');
if (token) {
request.setRequestHeader('authorization', 'Bearer ' + token);
}
});
Информация о сеансе может быть сериализованной/десериализацией в и из сессии, чтобы получить идентификатор пользователя из токен аутентификации, содержащий идентификатор сеанса. Это, на мой взгляд, лучший подход, поскольку он ограничивает объем данных, хранящихся на клиенте, и обеспечивает лучшую безопасность, чем хранение любой информации пользователя. Вот fantastic explanation and example стратегии местного паспорта и как его можно использовать для поддержки сеансов в клиентских приложениях.
Вот пример того, как можно реализовать на стороне сервера проверки клиентского куки в курьерским:
//Set a session secret
var secrets = { sessionSecret: process.env.secret || 'my secret string'};
//Require express-jwt and set a secret for the cookie
var expressJwt = require('express-jwt');
var validateJwt = expressJwt({ secret: secrets.sessionSecret });
//Returns a jwt token signed by the app secret
var signToken = function(id) {
return jwt.sign({
id: id
}, secrets.sessionSecret, {
expiresInMinutes: 60 * 24 // 24 hours
});
};
//Set token cookie directly
var setTokenCookie = function(req, res) {
if (!req.user) {
return res.status(404).json({
message: 'Error during user validation'
});
}
var token = signToken(req.user.id, req.user.role);
res.cookie('token', JSON.stringify(token));
};
//Check to see if user is authenticated (call this when a route is requested)
var isAuthenticated = function(req, res, next) {
// allow access_token to be passed through query parameter as well
if (req.body && req.body.hasOwnProperty('access_token')) {
req.headers.authorization = 'Bearer ' + req.body.access_token;
}
// Validate jwt token
return validateJwt(req, res, next);
};
Проверьте наличие куки х-авторизации? Зависит от того, как вы храните свою клиентскую сторону сеанса. – Ludo