Информация о пользователе Stormpath

Хорошо, это мой код маршрутизатора, и я пытаюсь получить доступ к информации об учетной записи пользователя, когда он находится на домашней странице. Пока не повезло... что я здесь делаю не так?

// Render the dashboard page.
router.get('/home', function (req, res) {
  if (!req.user || req.user.status !== 'ENABLED') {
    return res.redirect('/login');
  }



  console.log('User:', req.user.email, 'just accessed the /home page!');


  //user: req.user

  res.render('home', {
    title: 'Home',
    user:req.user.username
    }

  );


});

person user61026    schedule 24.09.2014    source источник
comment
Всем привет. Можете ли вы сообщить нам, с каким репозиторием Stormpath вы работаете, например stormpath-express-sample или stormpath-express? Спасибо!   -  person robertjd    schedule 24.09.2014
comment
Привет, это экспресс-образец stormpath.   -  person user61026    schedule 25.09.2014


Ответы (2)


проблема (похоже) заключается в том, что на вашем маршруте не установлено промежуточное программное обеспечение loginRequired. Вы должны изменить свою сигнатуру функции на:

router.get('/home', stormpath.loginRequired, function(req, res) {
  ...
});

Это заставит пользователя быть оцененным правильно =)

person rdegges    schedule 28.09.2014
comment
ну, я не знаю. Пользователи могут попасть в эту область, только войдя в систему.. Я просто не смог заставить stormpath вернуть какие-либо пользовательские данные.. - person user61026; 28.09.2014
comment
У вас должен быть материал loginRequired, чтобы библиотека stormpath могла получить данные пользователя для этого маршрута. - person rdegges; 29.09.2014
comment
Хотите опубликовать весь код своего приложения? Вы также можете отправить его мне по электронной почте, если хотите: [email protected] - person rdegges; 01.10.2014

Ваш пример выглядит правильно, хотя я бы назначил весь объект пользователя в вызове рендеринга (сейчас вы просто передаете имя пользователя).

Итак, если вы поместили это в routes/index.js

// Render the 'home' page if logged in and account is not disabled
router.get('/home', function (req, res) {
  if (!req.user || req.user.status !== 'ENABLED') {
    return res.redirect('/login');
  }

  res.render('home', {
    title: 'Home',
    user: req.user
  });

});

Тогда представление в views/home.jade будет выглядеть так:

html
  head
    title=title
  body
    p Hello, #{user.username}
person robertjd    schedule 25.09.2014
comment
не могли бы вы просто привести пример, который использует router.get('/home', function (req, res) { и пользовательский объект, пожалуйста. должно быть что-то маленькое, что я упускаю... - person user61026; 25.09.2014
comment
Вы можете получить доступ к имени пользователя напрямую с помощью res.locals.user.username - person robertjd; 25.09.2014
comment
так что ваш пример code помещен в файл app.js? Потому что я поместил свой исходный код в routes >> index.js - person user61026; 26.09.2014
comment
Ах! Плохо, я показывал пример для stormpath-express, а не для stormpath-express-sample. Я обновил этот ответ соответственно. - person robertjd; 26.09.2014
comment
Итак, пользовательские данные. Я следовал тому же принципу и могу видеть свои пользовательские данные при регистрации ... но рендерить их с помощью нефрита, как другие, не планируется. Вот что у меня есть: res.render('home', { title: 'Home', user: req.user, cD: req.user.customData, }); - person user61026; 29.09.2014
comment
Затем я назвал это, используя p Hello, #{cd.item1} - person user61026; 29.09.2014
comment
Вы включили автоматическое расширение для пользовательских данных? См. docs.stormpath.com/nodejs/express/. - person robertjd; 29.09.2014
comment
Ага. var strategy = new StormpathStrategy({ expansions: 'customData' }); как я уже упоминал, я вижу свои пользовательские данные в терминале, но не могу заставить их отображаться на экране. - person user61026; 29.09.2014