Оригинал на GitHub
Вопрос
В быстрой форме регистрации нужно проверить, существует ли такой логин. Если да, то не дать форме сохраниться.
Ответ
Для создания формы регистрации при помощи Быстрой формы с контролем логина, необходимо сделать следующие действия:
Создаем простую таблицу в которую будут приниматься заявки на создание польователя. Мы делаем отдельную таблицу, так-как прямой доступ формы к таблице Пользователи является небезопасным подходом.
В настройках поля в котором пользователь указывает желаемый логин надо добавить regexp
(Формат верификации ввода), аналогичный полю login
в таблице users
: ^[a-z0-9_\-.]{3,30}$
.
В быстрой форме кнопка Сохранить сама не выполняет код-действия — она сохраняет строку в таблицу. Поэтому в любое поле необходимо добавить код-действия с триггером При добавлении, который будет создавать строку в таблице users. Обычно для таких целей используется первое поле строчной части.
В коде-действия, добавляющем пользователя первым действием взять select
по новому логину из таблицы users
и, если он не пустой (логин есть), то выдать errorException
— это остановит все последующие действия. Если логина нет, то вторым действием добавить пользователя.
Пример кода-действия при добавлении в первом поле в таблице заявок:
a1=: if(condition: $loginexist != ""; then: $err)
loginexist: select(table: 'users'; field: 'id'; where: 'login' = #login)
err: errorException(text: "Login already in use, choose another!")
a2=: insert(table: 'users'; field: 'login' = #login; field: 'pass' = #password; field: 'email' = #email; log: true)
В качестве улучшения пользовательского опыта, можно в коде форматирования поля #login
проверять наличие логина и сообщать пользователю о том, что введенный им логин уже существует до нажатия кнопки Сохранить.
Пример кода форматирования поля login в таблиц заявок:
f1=: setFormat(condition: $#nfv != ""; condition: $loginexist != ""; text: str`"Login" ++ $#nfv ++ "<b><span style='color:red'>already in use!</span></b>"`)
loginexist: select(table: 'users'; field: 'id'; where: 'login' = $#nfv)