Как создать кастом форму с подтверждением действия по 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
Насколько полезной была статья?

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

Falcon Space

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

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

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

по ходу эксплуатации программы. Как создается функционал на платформе

Это простой удобный интерфейс

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