Не удается получить доступ к customData в представлении для пользователя, не вошедшего в систему - Express.js Stormpath

Следуя этому руководству:

https://stormpath.com/blog/build-nodejs-express-stormpath-app

Я могу легко получить доступ и отобразить в представлении profile.jade, customData для вошедшего в систему пользователя из profile.js с помощью

username: req.user.username,
city: req.user.customData.city,

Имя файла: profile.jade

h1 This is surname #{username} and #{city}

Я хочу отобразить в представлении данные для незарегистрированного пользователя по URL-адресу: http://localhost:3000/-jsmith, который у меня работает, за исключением того, что я не могу получить доступ к любым customData.

ИМЯ ФАЙЛА: server.js У меня есть этот набор.

app.use(stormpath.init(app, {
  expand: {
    customData: true

а также

app.get('/-:id', function(req, res, next) {
        console.log('the response will be sent by the next function ...');
        var id = req.params.id;
        next();
    },
    function(req, res) {
        var id = req.params.id;
        req.app.get('stormpathApplication').getAccounts({
            username: id

        }, (err, accounts) => {
            if (err) throw err;
            accounts.each((account, cb) => {
                console.log('Found matching account:', account);
                cb();
                res.render('user', {
                    email: account.email,
                    city: account.customData.city,

                });

            });
        });
    }
);

Проблема:

Имя файла: user.jade

Отображается имя пользователя, но ничего для города

h1 This is surname #{username} and #{city}

Где я ошибаюсь?


person Rob McCormack    schedule 28.08.2016    source источник


Ответы (1)


Если вы берете объект приложения Stormpath напрямую и выполняете с ним вызовы API, вам действительно нужно добавить параметр { expand: 'customData' } к каждому вызову API.

Я знаю, что вы уже установили его для своей конфигурации express-stormpath — это относится только к вызовам API, которые приложение делает от вашего имени (например, req.user). Я вижу, как это может показаться запутанным.

Итак, чтобы это сработало, просто замените:

    req.app.get('stormpathApplication').getAccounts({
        username: id
    }

С:

    req.app.get('stormpathApplication').getAccounts({
        username: id,
        expand: 'customData'
    }

И все должно работать. Удачного кодирования!

person Edward Jiang    schedule 28.08.2016
comment
Спасибо, это сработало отлично, и простое решение. Я знал, что могу вернуть объект JSON со всеми customData, но это такое простое решение. - person Rob McCormack; 28.08.2016