0

Я использую node.js и с passport.js, чтобы сделать локальную аутентификацию, но я хотел знать, как узнать, клиент ли клиент на стороне клиента.Проверка того, что пользователь вошел в систему clientside

Что было бы лучшим решением для проверки подлинности клиента с моим кодом angularjs? Будет ли он проверять, активен ли файл cookie, содержащий идентификатор сеанса?

+0

Проверьте наличие куки х-авторизации? Зависит от того, как вы храните свою клиентскую сторону сеанса. – Ludo

ответ

1

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); 
}; 
+0

Можете ли вы дополнительно объяснить, что такое «секретное» значение? Я не совсем понял это. Кроме того, когда я должен проверить, разрешено ли задание? есть ли какое-то конкретное место? И как я могу проверить serveride, если файл cookie верен? –

+0

JWT использует набор хэш-алгоритмов для кодирования сообщения с помощью созданной вами строчки разработчика. Вот большое введение в JWT: https://jwt.io/introduction/ – JToTheC

+0

Включив в свой узел приложение jwt module (express-jwt, если вы используете Express), вы подписываете и проверяете токен клиента, чтобы убедиться в этом. и только у вас есть «секрет», который его декодирует и гарантирует, что он не был подделан (соответственно). Что касается проверки проверки клиента, это обычно делается как обратный вызов в определении маршрута. app.get ('/ myRouteDef', auth.isAuthenticated, myController.myMethod); – JToTheC

Смежные вопросы