Как создать кастом форму с подтверждением действия по Email или CMS

C помощью кода JS и запросов RequestJS мы можем создать функционал кастомной формы, в которой действие будет подтверждаться по Email или SMS. 

Код JS на странице: 

$(function(){
            $(document).delegate('.ae-sendCode', 'click', function(e){
              e.preventDefault();
              var contact = $('.ae-contact').val();
              if(!contact) {
                $('.ae-contact').focus();
              	return;
              }
              // запрашиваем код для юзера
              as.sys.request("auth", "sendCode", {
   		         data: { contact:contact },
        	     onSuccess: function (data) {
                   if (data.result && data.data && data.data.length) {
                     console.log(data.data);
                     var s = '';
                     as.sys.showDialog("Введите код", s, "OK", function () {
                        var code = $('.ae-code').val();
                        if(!code) {
                          $('.ae-code').focus();
                          return;
                        }
                        // проверяем код и выполняем целевое действие
                       	as.sys.request("auth", "verifyCode", {
   		         			data: { contact:contact, code: code },
        	     			onSuccess: function (data) {
                   				if (data.result && data.data && data.data.length) {
                                  location.href='/';
                                }else{
                                   as.sys.bootstrapAlert(data.msg || "Неверный код, либо пользователь заблокирован", {type: "warning"});
                                }
                            }
                        });
                     });
                   }else {
                   	 as.sys.bootstrapAlert(data.msg || "Что-то пошло не так. Проверьте указанный контакт.", {type: "warning"})
                   }
                 }
			  });
            });
        });	

Код первой процедуры SQL (отправка кода пользователю на email через внешнее действие): 

CREATE OR ALTER   PROCEDURE [dbo].[request_auth_sendCode]
	@parameters DictionaryParameter READONLY,  -- or ExtendedDictionaryParameter
	@username nvarchar(32)
AS
BEGIN
	declare @code nvarchar(32) =  upper(left(convert(nvarchar(36), newid()), 5))   -- 'xxx12'

	declare @contact nvarchar(128)
	select @contact = Value from @parameters where [Key]='contact'



	declare @userID int, @email nvarchar(128)
	select @userID = id, @email = email from as_users where lower(email)=lower(@contact)

	if(@userID is null) begin
		select 'Не найден указанный email' Msg, 0 Result
		return
	end

	update as_users set sessionCode=@code, sessionCodeCreated = getdate()
	where id = @userID

	    -- SELECT 1 Msg, Result
	select '' Msg, 1 Result



    -- SELECT 2 Основные данные в виде произвольной таблицы
    select 1 tst
    -- SELECT 3 Внешние действия

	declare @body nvarchar(max) = 'Код для ввода на сайте - ' + @code
	select 'email' type, @email [to], 'Подтверждение действия' subject, @body body

END

Вторая процедура SQL (проверка кода и выполнение целевого действия): 

CREATE OR ALTER   PROCEDURE [dbo].[request_auth_verifyCode]
	@parameters DictionaryParameter READONLY,  -- or ExtendedDictionaryParameter
	@username nvarchar(32)
AS
BEGIN
	declare @contact nvarchar(128)
	select @contact = Value from @parameters where [Key]='contact'
	declare @code nvarchar(128)
	select @code = Value from @parameters where [Key]='code'

	declare @userID int,@date datetime , @user nvarchar(128)
	select @userID = id, @date = sessionCodeCreated, @user = username  from as_users where lower(email)=lower(@contact) and lower(sessionCode)=lower(@code)

	if(@userID is null) begin
		select 'Неверный код' Msg, 0 Result
		return
	end

	if(datediff(minute, getdate(), @date) > 20) begin
		select 'Истекло время ожидания. Попробуйте заново отправить код' Msg, 0 Result
		return
	end

	-- SELECT 1 Msg, Result
	select '' Msg, 1 Result

    -- SELECT 2 Основные данные в виде произвольной таблицы
    select 1 tst
    -- SELECT 3 Внешние действия

    --- если все ОК - то выполняем целевое действие ....

END

Примечание:

  • в таблице as_users 2 дополнительных поля sessionCode и SessionCodeCreated - для хранения текущего запрошенного кода и времени создания кода (чтобы он действовал в течение короткого промежутка времени)
Falcon Space - функциальная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space

SQL-инструмент для создания личных кабинетов на сайте

Суть подхода и история создания Falcon Space

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства

Веб-приложения на чистом MS SQL. Обучение разработке на Falcon Space

Вы можете разрабатывать самостоятельно или сотрудничать с нами в плане веб-разработки на платформе Falcon Space, используя только SQL и HTML.
Смотреть примеры с кодом SQL
Документация по платформе

Google поиск по нашей документации