Обработчик пост-регистрации Stormpath: не удается сохранить пользовательские данные в учетной записи Okta

После того, как пользователь регистрируется в моем приложении, на локальном сервере MySQL назначается идентификатор, который затем регистрируется как customData.id в соответствующей учетной записи Stormpath.

Это работало до перехода на Okta (используя express-stormpath версии 3.2.0). После миграции и обновления до версии 4.0.0 тот же код больше не работает, и я не могу найти справку или документацию, чтобы узнать, что нужно изменить. Явных ошибок нет, но customData не отображается в новой учетной записи в разделе «профиль» и приводит к неопределенным результатам при вызове.

Соответствующие postRegistrationHandler:

postRegistrationHandler: function(account, req, res, next) {
    account.getCustomData(function(err, data) {
        if (err) {
            return next(err);
        }
        else {
            var newaccount = {
                email: account.email,
                isgestore: isgestore,
                stormpath_href: account.href,
                dataiscrizione: new Date()
            };
            db.query('SELECT * FROM utenti WHERE email = "'+account.email+'";', function(err,check){
                if(err) throw err;
                if(check==''){
                    res.sendStatus(500);
                } else {
                    db.query('UPDATE utenti SET ? WHERE email = "'+account.email+'";', newaccount, function(err,result){
                        if(err) throw err;
                        data.id = check[0].id;
                        data.save();
                        res.redirect('/regRedirect');
                    });
                }
            });
        }
    });
},

Миграция со Stormpath на Okta прошла успешно, и пользовательские данные были импортированы правильно. Проблема возникает только с недавно зарегистрированными учетными записями.


person Community    schedule 18.08.2017    source источник


Ответы (1)


Недавно я сам перенес приложение со Stormpath на Okta. В основном используется Java SDK, а также экспресс-библиотека nodejs. Не могу сказать, что переход прошел гладко.

Несколько вещей приходят на ум как возможные вещи, которые вы могли бы проверить: - вы обновляете поле "id". Это может быть зарезервированное поле в Okta. Должен ли это быть profile.id? - Посмотрите, можете ли вы использовать REST API для обновления своего пользователя. Возможно, было бы проще выяснить, что не так, обратившись прямо к API.

Сначала выберите своего пользователя.

curl -X GET \
https://<your okta app>.com/api/v1/users/<user id> \
  -H 'accept: application/json' \
  -H 'authorization: SSWS  <your api token>' \
  -H 'content-type: application/json' 

Попробуйте установить свойства, которые вы хотите обновить, в разделе профиля

  curl -X POST \
  https://<your okta app>.com/api/v1/users/<user id> \
  -H 'accept: application/json' \
  -H 'authorization: SSWS  <your api token>' \
  -H 'content-type: application/json' \
  -d '{
  "profile": {
        "lastName": "johns",
        "secondEmail": null,
        "mobilePhone": null,
        "emailVerificationStatus": "UNKNOWN",
        "email": "[email protected]",
        "stormpathMigrationRecoveryAnswer": "What is the length of a string",
        "login": "[email protected]",
        "firstName": "chris"
    }
}'

Справочник по пользовательскому API OKTA: http://OKTA%20User%20Api

person babadofar    schedule 21.08.2017
comment
Что ж, видимо, это была проблема на стороне Окты (может быть, из-за недавнего отключения Stormpath), потому что в той же среде, с тем же кодом теперь она снова работает. Пользовательские переменные сохраняются в профиле пользователя Okta. Однако, если autologin включен, новая пользовательская переменная недоступна для req.user, пока приложение не будет перезапущено. Выход из системы и вход в нее ситуацию не меняет, либо autoLogin выключение, либо перезапуск приложения. Серьезная проблема для меня, как вы думаете, есть способ решить ее на моей стороне? - person ; 21.08.2017