Forms — Versola Docs
/docs
До 1.00.7.5versola.ioGitHub

Forms

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

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

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

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 пользователя. В новом развертывании удаление passkey, начало добавления нового и выход другой сессии сначала требуют свежего входа, и страница отправляет пользователя на login, который его запрашивает; см. политики edge.

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

Список

Forms — одна строка на ID формы
Таблица Forms: у каждой формы тип, языки, на которых она переведена полностью, или те, где не хватает текстов, и активная версия с предупреждением, если сохранена более новая

Одна строка на форму, а не на сохраненную версию.

КолонкаЗначение
FormID формы.
KindBuilt-in — форма, для которой central перечисляет состояния предпросмотра (см. Предпросмотр); Custom — любая другая. Тип консоль определяет сама, отдельного поля для него нет.
LocalesАктивные языки, на которых у формы есть все тексты, в виде чипов (en ru и +1 для остальных, их названия видны при наведении). Язык, где не хватает текстов, назван в чипе Missing: ru, kk. Языки — те, что активны в Locales на System settings; оценивается активная версия, а если активной нет — самая новая.
Active versionВерсия, которую отдает auth (v7). Чип v8 not active значит, что сохранена более новая версия, которая не включена. No active version — у auth нет версии, чтобы показать форму.

Фильтры — All, Built-in, Custom и Missing translations, рядом с поиском по ID формы. В меню строки — Open и Copy ID. Кнопка + Create form открывает редактор с пустой формой.

Страница формы

Щелкните строку, чтобы открыть форму. Страница и есть редактор: в шапке ID формы, Built-in или Custom, активная версия, более новая сохраненная версия и языки, а также единственное основное действие — Save as new version. Под шапкой заметка говорит, что делает сохранение: Saving stores v9 without activating it. У редактора есть вкладки и рядом с ними живой предпросмотр, который всегда на экране.

Texts на языке, где не хватает двух ключей, и предпросмотр рядом
Вкладка Texts формы credential на русском с включенным Missing only: две записи с предупреждением Missing in ru, поле в фокусе подсвечено, а справа в предпросмотре обведен английский текст, который показывается вместо недостающего
ВкладкаЧто в ней
TextsТексты формы, по одному языку за раз (см. ниже).
StyleСобственный CSS формы, применяется поверх темы.
ScriptИсходник формы (TSX) — для справки. В исходнике встроенной формы общие модули подставлены, а типы убраны.
PropertiesBackend-свойства: Boolean, AnyOf (список допустимых значений) и Number, добавляются кнопками + Add Boolean, + Add AnyOf и + Add Number. Эта вкладка только у пользовательской формы: состояния и свойства встроенной формы определяет central, а сохраняемая версия оставляет свойства, которые у нее были.
VersionsВсе сохраненные версии с кнопками Preview, Edit a copy и Set active.

Вкладка указана в адресе (&edit=style), поэтому ссылка открывает ее.

Texts

Язык для правки выбирается кнопками над записями; точка отмечает язык, где есть пропуски. Missing only оставляет записи, которых языку не хватает, а строка под кнопками называет первые два недостающих ключа и +N для остальных.

Записи сгруппированы под заголовками Page, Fields, Buttons и Errors — группа определяется по имени ключа. В записи — ключ, текст языка по умолчанию мелким серым в качестве образца и поле. Недостающий перевод — поле с предупреждением и подсказкой Shown in English until translated: пока вы не введете текст, пользователи видят текст языка по умолчанию.

Ключи берутся из уже сохраненных текстов формы; новые ключи консоль не добавляет.

Предпросмотр

Предпросмотр рисует форму с несохраненными правками, на языке, который вы правите, в выбранной теме и в ширину телефона или рабочего стола. Текст ключа, в который вы вводите, обведен штриховой рамкой цвета акцента, а английский текст, который подставлен вместо каждого недостающего ключа, — штриховой рамкой цвета предупреждения. Ключ, в тексте которого есть подстановка ({{minutes}}), не обводится.

Для встроенной формы список State показывает ситуации, которые central знает для нее, каждую с реалистичными данными: для входа — email и пароль, телефон с одной страной или несколькими, неверный пароль и неудавшийся passkey; для одноразового кода — таймер повторной отправки, заблокированный ввод и неверный код; для согласия — обычный запрос, все стандартные scope и запрос без необязательных пунктов. Список входит в сборку central: он не хранится, и консоль не может его изменить. У пользовательской формы такого списка нет, и ее предпросмотр использует backend-свойства с вкладки Properties, показанные элементами управления в предпросмотре. Предпросмотр запускает сохраненный скомпилированный скрипт. Ниже 900 px предпросмотр превращается в сворачиваемую полосу над вкладками.

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

Versions — более новая версия сохранена, но не активна
Вкладка Versions формы credential: v2 сохранена, но не активна, с предупреждением; v1 активна; у каждой кнопки Preview, Edit a copy и Set active
ДействиеЧто происходит
Save as new versionДобавляет следующий номер (v2, v3 и так далее) и остается на странице. Новая версия не становится активной, кроме первой версии формы: она активна сразу. Баннер говорит, что сохранено, и ведет на Versions.
Set activeДелает версию активной, остальные деактивирует. Работает для любой сохраненной версии, поэтому это и есть откат.
Edit a copyЗагружает эту версию в редактор как основу следующего сохранения. При несохраненных правках сначала спрашивает подтверждение.
PreviewРисует эту сохраненную версию в предпросмотре; Back to my edits возвращает вашу рабочую копию.
ХранениеCentral хранит пять новейших версий и активную. Более старые неактивные версии удаляются при сохранении.

Версия новее активной помечена Stored, not active, а над списком стоит предупреждение: v8 is stored but not active. Users still get v7. Версия никогда не правится на месте. Чтобы изменить форму, отредактируйте ее, нажмите Save as new version, затем Set active на новой версии. Если она ведет себя плохо, нажмите Set active на предыдущей. auth подхватывает изменение при следующей синхронизации конфигурации, а не мгновенно. Удалить форму нельзя: в central нет такого эндпоинта, поэтому на странице нет карточки удаления.

При выходе со страницы с несохраненными правками консоль просит подтверждение.

Создание формы

+ Create form открывает редактор с полем Form ID на вкладке Script, без версий. В ID допустимы строчные буквы, цифры и дефисы, после сохранения он не меняется. auth запрашивает только ID из таблицы выше, поэтому форма с другим ID сохранится, но не будет показана. Save as new version сохраняет v1 и открывает новую форму на вкладке Versions.

Что консоль может изменить, а что нет

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 есть.

Темы

Тема оформляет все формы и вынесена на отдельный экран: Themes. Выбор Theme в предпросмотре формы перечисляет темы, доступные выбранному тенанту, чтобы можно было увидеть форму в каждой из них.

Что дальше

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