Я использую аутентификацию на основе адаптера для защиты ресурсов, а также для управления всей логикой аутентификации (проверка учетных данных). Если проверка пользователя/пароля прошла успешно, вызывается метод WL.Server.setActiveUser
для создания аутентифицированного сеанса для Realm с данными пользователя, хранящимися в объекте userIdentity.
Процесс проверки пользователя/пароля возвращает OK/Fail, а также файл cookie, если проверка прошла успешно. И этот файл cookie должен быть отправлен при следующих вызовах адаптера, поэтому я также добавляю его в объект данных userIdentity. Моя идея заключалась в том, чтобы сохранить его в объекте userIdentity, поскольку его можно получить на других адаптерах (var userIdentity = WL.Server.getActiveUser();
) для добавления значения cookie в заголовок запроса адаптера, и он работает правильно!
В чем проблема? Ответ адаптера может содержать новое значение для этого файла cookie, поэтому я должен обновить объект userIdentity, чтобы заменить старое значение файла cookie новым значением. Тем не менее, объект userIdentity является неизменяемым, поэтому он всегда содержит исходный файл cookie, полученный процессом входа в систему.
Есть ли способ обновить объект userIdentity? В противном случае, как я могу управлять изменяемой таблицей для сохранения и обновления файла cookie, связанного с каждой пользовательской сессией, чтобы отправить его по запросу адаптера в Backend?
Есть ли лучший способ управлять этим серверным файлом cookie, необходимым для каждого запроса пользовательского адаптера?
Большое спасибо! Серги
PS: есть вопрос, который пытается решить эту проблему, но возможный ответ мне не подходит (IBM MobileFirst Platform Foundation 6.3: Можем ли мы изменить пользовательские атрибуты объекта идентификации пользователя [MobileFirst Session]): я попробовал следующий код для обновления userIdentity:
var newUserIdentity = {
userId: userIdentity.userId,
attributes: {
cookies: newValue
}
};
WL.Server.setActiveUser(realm, null);
WL.Server.setActiveUser(realm, newUserIdentity);
Но когда оно получено от другого адаптера (var userIdentity = WL.Server.getActiveUser()
), оно содержит исходное значение!