Я создаю приложение Sails.js, которое включает логин пользователя. Как инструктирует документация, когда пользователь входит в, сессионный записывает ее идентификатор в сессии соответственно:Безопасно хранить полную информацию о пользователе в сеансе с Sails.js?
req.session.userId = createdUser.id;
В большинстве примеров, каждый маршрут выполняет поиск по этому ID, если он присутствует, и посылает аутентифицированный пользователь, если он найден. Это кажется мне очень неэффективным. КАЖДЫЙ вид должен знать, есть ли пользователь с подписью, чтобы отобразить ее имя в верхнем левом углу. Поэтому, если я правильно понимаю, каждое представление включает в себя поездку в базу данных для поиска пользователя, даже если я уменьшу количество кода, создав политику, которая выполняет этот поиск для каждого маршрута.
То, что я предпочел бы сделать это записывать информацию пользователя в сессии, с тем, что после того, как она проходит проверку подлинности, эта информация автоматически присутствует в каждом виде:
req.session.userId = createdUser.id;
createdUser.loggedIn = true;
req.session.user = createdUser;
// the createdUser object does NOT contain the encrypted password or other sensitive info
Это то позволяет мне просто проверить в шаблон для такого пользователя с подписью из родительского шаблона layout
(и любого дочернего шаблона). (Я использую виды на стороне сервера.)
{% if (session.user && session.user.loggedIn) %}
<li><a href="/profile/{{ session.user.id }}">Hi there, {{ session.user.username }}</a></li>
{% else %}
<li><a href="/signin">Sign In (if you want)</a></li>
{% endif %}
Мой вопрос заключается в том, создает ли это риск безопасности любого рода. Кажется МНОГО более эффективным, чем поиск пользователя во всех представлениях, но, возможно, есть причина, по которой документация, похоже, советует это?
Только что мне нужно - спасибо! –