Работа с UserInfo

UserInfo — объект, содержащий основную информацию о текущем пользователе СБИС. В нем содержится имя и идентификатор пользователя, идентификатор аккаунта и т.д.

Эта информация требуется для разработки интерфейса. Например, может понадобиться показать один текст для авторизованного пользователя, другой — для демо пользователя, и отличный для гостя.

Wasaby окружение

В рамках Wasaby работа с UserInfo реализуется через два компонента:

  • EngineUser/Info:Loader — компонент высшего порядка, который запрашивает с бизнес-логики информацию о пользователе и инициализирует компонент, хранящий данные.

  • EngineUser/Info:Info - компонент, хранящий информацию о пользователе. Получить информацию из него можно через метод get. Хранение данных организовано через Browser/Storage:SessionStorage, который работает как на сервере, так и на клиенте.

Все Wasaby шаблоны страниц online.sbis.ru уже содержат внутри себя компонент EngineUser/Info:Loader. Если страница строится на этих шаблонах, то можно использовать EngineUser/Info:Info в собственных компонентах подобным образом:

import {Control} from 'UI/Base';
import {Info as userInfo} from 'EngineUser/Info';

class MyControl extends Control {
  protected _beforeMount() {
    this._userName = userInfo.get('ИмяПользователя');
  }
}

При создании собственного шаблона страницы для работы с UserInfo необходимо обернуть приложение в Loader:

<EngineUser.Info:Loader>
    <SbisEnvUI.Bootstrap>
        <!-- Page Content -->
    </SbisEnvUI.Bootstrap>
</EngineUser.Info:Loader>

WS3 окружение

В рамках старого окружения UserInfo получается на сервисе представления или в коде построения страницы и добавляется в request или window в зависимости от среды исполнения. Далее, получить информацию можно через метод get в Core/UserInfo.

Может возникнуть ситуация, когда необходимо встроить Wasaby компонент в WS3 окружение. Для этого мы поддержали работу EngineUser/Info в рамках старого окружения. Если компонент не находит данные в своем хранилище, то данные берутся из Core/UserInfo.

При этом, если попробовать использовать Core/UserInfo в новом окружении, он ничего не отдаст. Данные для старого Core/UserInfo инициализируются (записываются в объект window) только при подгрузке слоя совместимости (через Lib/Control/LayerCompatible/LayerCompatible).

FAQ

  • Почему при вызове метода get из EngineUser/Info:Info всегда вовзращается undefined? Возможны следующие причины:
  • Ваш код вызывается раньше чем инициализируются UserInfo. Для решения этой проблемы необходимо в настройках предзагрузки в dependencies добавить ключ 'userInfo' (подробнее в статье).
  • В метод передано некорретное название поля.