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

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

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
Сайт использует Cookie. Правила конфиденциальности OK