Forms — Versola Docs
VersolaVersola/docs
До 1.00.7.1versola.kzGitHub

Forms

Экран Forms в консоли администратора — экраны входа, которые показывает auth, их версии и активная версия, переводы, предпросмотр и темы оформления.

Форма — это один экран входа, который auth рисует в браузере: поле логина, пароль, одноразовый код, согласие и так далее. Экран Forms показывает их список, хранит версии, переключает активную версию и управляет темами оформления. Прежде чем что-то менять, прочитайте раздел о том, что консоль может изменить, а что нет.

Прежде чем начать

Forms находится в боковом меню в группе GLOBAL. Формы и языки общие для всех тенантов; темы бывают глобальными или принадлежат одному тенанту, поэтому список тем зависит от тенанта, выбранного в боковом меню. Чтобы увидеть экран, нужно разрешение forms:read. Для создания версии, переключения активной версии и создания, правки и удаления темы нужно forms:manage.

Как формы попадают на экраны входа

У каждой формы есть ID, и auth запрашивает формы по фиксированному ID. Форма состоит из:

  • скомпилированного скрипта Solid.js — он выполняется в браузере;
  • исходника (TSX), который хранится рядом;
  • CSS-файла формы;
  • переводов — по набору строк на каждый язык;
  • backend-свойств, то есть значений, которые бэкенд передаёт в форму.

Встроенные формы написаны в каталоге central-ui/forms/ репозитория продукта. Команда npm run build:forms компилирует каждую из них и кладёт скрипт, исходник, CSS и переводы в ресурсы central, а тот при запуске загружает их в базу данных.

ID формыКогда показывается
credentialПользователь вводит логин, email или телефон либо выбирает passkey.
passwordПользователь вводит пароль.
set-passwordПользователь должен задать новый пароль, например после входа с временным.
otpПользователь вводит одноразовый код.
passkey-enrollauth предлагает зарегистрировать passkey.
consentКлиент просит пользователя подтвердить scope.
access-deniedПользователь заблокирован, например после слишком большого числа неудачных попыток.
conversation-expiredВход занял слишком много времени, и диалог больше не существует.
service-unavailableauth не может продолжить.
confirm-logout/logout просит подтвердить выход.
signed-outПользователь вышел.
auth-settingsСтраница аккаунта с сессиями и passkey пользователя.

auth показывает только активную версию формы и переводы тех языков, которые активны на странице Locales. Если формы нет, auth отвечает простой страницей «not found».

Список

Forms — по карточке на каждый ID формы, ниже раздел Themes
Страница Forms: двенадцать встроенных форм в свёрнутом виде и раздел Themes под ними

Щёлкните по карточке, чтобы увидеть версии, новые сверху. У каждой версии есть номер (v1), значок Active у той, которую отдаёт auth, и кнопка Set Active у остальных. Раскройте версию, и вы увидите выбор Theme, элементы управления backend-свойствами и кнопку Preview.

Раскрытая форма: активна версия v1
Раскрытая форма consent: версия v1 со значком Active, выбор Theme со значением default и кнопка Preview

Preview показывает форму во фрейме. Можно менять тему, язык, ширину и значения backend-свойств, чтобы увидеть каждое состояние. Предпросмотр запускает сохранённый скомпилированный скрипт.

Версии и откат

ДействиеЧто происходит
Сохранение версииSave as new version добавляет следующий номер (v2, v3 и так далее). Новая версия не становится активной, кроме первой версии формы: она активна сразу.
Set ActiveДелает версию активной, остальные деактивирует. Работает для любой версии из списка, поэтому это и есть откат.
ХранениеCentral хранит пять новейших версий и активную. Более старые неактивные версии удаляются при сохранении.

Версия никогда не правится на месте. Чтобы изменить форму, нажмите + в её карточке (New Version), отредактируйте, сохраните и нажмите Set Active у новой версии. Если она ведёт себя неправильно, нажмите Set Active у предыдущей. auth подхватывает изменение при следующей синхронизации конфигурации, а не мгновенно.

Редактирование формы

Кнопка + рядом с заголовком Forms создаёт форму с новым ID. auth запрашивает только ID из таблицы выше, поэтому форма с другим ID сохраняется, но никогда не показывается.

New Version — редактор формы на основе v1
Страница New Version для формы consent: исходник Solid.js, CSS формы, поля перевода на английский и русский, backend-свойства, тема, предпросмотр и кнопка Save as new version
РазделЧто в нём
Solid.js Source (JSX/TSX)Исходник компонентов формы.
Per-form CSSСтили этой формы поверх темы.
LocalizationsПо вкладке на каждый язык со страницы Locales. Каждый placeholder из шаблона — отдельная строка, значение — текст на этом языке.
Backend PropertiesСвойства Boolean, AnyOf (список допустимых значений) и Number; добавляются кнопками + Add Boolean, + Add AnyOf и + Add Number. Предпросмотр их использует.
Theme и PreviewТема и предпросмотр ещё не сохранённой формы.

Note: В консоли нет компилятора. Save as new version отправляет скомпилированный скрипт той версии, от которой вы отталкивались, без изменений, вместе с текстом из редактора исходника. Поэтому правка исходника Solid.js в консоли не меняет то, что видят пользователи. CSS, переводы и backend-свойства действуют. Чтобы изменить поведение формы, соберите её вне консоли и передайте скомпилированный скрипт в поле jsCompiled запроса PUT /configuration/forms в Central API.

У встроенных форм backend-свойства объявлены, но значения берутся из других мест. credential объявляет primaryCredentials, inlinePassword и passkey, которые auth берёт из настроек входа клиента. otp объявляет length и resendAfter, они приходят из настроек challenge тенанта.

Warning: Если в конфигурации central есть блок bootstrap, то при каждом запуске central сравнивает активную версию каждой встроенной формы с копией, вложенной в его образ. Если они различаются, он сохраняет вложенную копию как новую версию и делает её активной. Ваша правка остаётся в списке версий, и её можно активировать снова, но следующий перезапуск заменит её ещё раз. В central.conf, который создаёт versola configure, блок bootstrap есть.

Темы

Тема — это блок CSS, который оформляет все формы. Клиент выбирает тему в поле Forms Theme на своей странице (Клиент); если клиент не выбрал тему или её CSS пуст, применяется тема default.

Themes — глобальная тема default
Страница Forms с раскрытым разделом Themes: глобальная тема default со значком карандаша

Откройте Themes, и вы увидите глобальные темы, а под заголовком This tenant — темы выбранного тенанта. Кнопка + открывает New Theme.

ПолеЗначение
Theme IDИмя, которое выбирают клиенты, например acme-dark. После создания не меняется.
ScopeGlobal (все тенанты) или This tenant (тенант, выбранный в боковом меню). Выбирается при создании темы.
CSSСтили.

Карандаш у темы открывает правку её CSS; Delete находится на странице правки. Тему default удалить нельзя, как и тему, которую ещё использует клиент (API отвечает конфликтом). При запуске central также возвращает default к таблице стилей из своего образа, если они различаются, — так же, как и для форм. Свои стили положите в новую тему и выберите её в клиенте, а default не правьте.

Что дальше

  • Locales — какие языки предлагает auth и что нужно для активного языка
  • Клиент — выбор темы клиента
  • Scope — описания scope и claim, которые показывает форма consent