2013-03-25 4 views
4

Как с почти любым веб-приложением, мне нужен способ ссылки на текущего пользователя в моем приложении node.js.Где я должен хранить текущего пользователя в node.js?

У меня работает система входа/сессии, но сегодня я заметил, что, когда я вхожу в приложение в одном браузере и просматриваю его в другом, я могу видеть те же данные, что и в первом браузере.

В настоящее время я сохраняю информацию о текущем пользователе в глобальном объекте app.current_user, но теперь я понимаю, что он является общим для всех запросов/сеансов, поскольку node.js является однопоточным - и, следовательно, является плохим идея.

Что было бы правильным способом сохранить ссылку на текущего пользователя? Текущий пользователь не просто хэш пользовательских данных, а модель Mongoose, поэтому я думаю, что сохранение в cookie не было бы хорошей идеей?

BTW - Я также сохраняю настройки пользователя и еще несколько вещей, которые я не хочу извлекать снова каждый раз, когда я что-то делаю с пользователем и их настройками (что может случиться довольно много раз за один запрос). Я думаю, вы могли бы сказать, что я кэширую текущего пользователя в памяти.

+0

Я использую passport.js для аутентификации, и вся информация пользователя хранится в req.user. Я создал свою собственную модель мангуста для своего пользователя. –

+0

@StanCromlish - мне просто стало понятно, что req привязан к текущему запросу (т. Е. Он не является глобальным), так что это сработает. Тем не менее, я не уверен, могу ли я передать объект req в моем приложении (используя здесь схему Locomotivejs) – ragulka

+0

Я не знаю ни о Locomotivejs. Я передаю объект req в своих Node.js с помощью Express и EJS Views. Если вы можете перенаправлять с req, res с помощью Локомотива, вы должны быть в состоянии сделать все в порядке. –

ответ

-1

В экспресс можно использовать сеанс

//To set up session 
app.use(express.cookieParser()); 
app.use(express.session({secret: 'secret pass', store: sessionStore})); 
//To use it 
req.session = {user:name , model:mongo_model}; 
console.log(req.session.user); 

Примеры

  1. См простой пример, here
  2. Посмотрите, как использовать mongostore для данных сессии в этом question
+1

Не могли бы вы объяснить, пожалуйста, здесь внизу?Я хотел бы знать, почему это плохо. –

1

Это кажется правильным местом для хранения информации abo ut, текущий пользователь в данный момент находится в объекте запроса.

Если вам не нравится идея передачи объекта запроса в mongoose или другие модули, вам необходимо внести изменения в свой маршрутизатор/контроллер/промежуточное программное обеспечение. Например, я могу установить идентификатор пользователя lastModifiedBy для модели Post в действии posts_controllerupdate().

Вы также можете попробовать использовать довольно новую функцию domain для хранения текущих данных пользователя, но при работе с Mongoose, это еще не поможет, потому что Mongoose не поддерживает домены еще: https://github.com/LearnBoost/mongoose/pull/1337

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