Создание записей базы данных в Exist-DB с помощью вызовов Ajax - PullRequest
0 голосов
/ 02 сентября 2018

При разработке автономного приложения exist-db я столкнулся с некоторыми проблемами, связанными с передачей личности пользователя во время вызова ajax.

Я создал стандартную страницу, которая позволяет пользователю войти в систему со своей стандартной учетной записью Существовать-БД. (Это более или менее основано на этом https://github.com/eXist-db/existdb-login).

В какой-то момент пользователи должны создать свои собственные записи и загрузить файлы, и это делается с помощью сценария ajax (я использую загрузчик Kartra для загрузки, но в основном это стандартная функция загрузки ajax):

$('#input-24').fileinput({

        uploadUrl: "../modules/uploader.xql",
        uploadAsync: true,

        fileActionSettings : {
            uploadExtraData() {

                return {
                    'FileName': $(this).data('title'),

                }
            }
        },
    });  

Теперь, конечно, это не удастся, так как будет выглядеть так, будто пользователь GUEST пытается создать записи, что является действием, разрешенным только для зарегистрированных пользователей.

Существуют-db, позволяет ли на этом этапе отправлять мои учетные данные для входа в систему, не прибегая к стандартному входу в систему HTTP (что проблематично, поскольку это означает создание файла cookie для запоминания пароля, который более или менее отображает весь вход в систему с помощью существующих механизмов бесполезен), или есть ли способ использовать контроллер вместо внешнего скрипта?

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Для простой базовой аутентификации мы делаем следующее, так как сама страница обслуживается из xQuery.

шаг 1: мы создаем на странице xQuery переменную, содержащую информацию о сеансе. Это должно быть хорошо для вас ... результатом вашего входа будет HTML-страница:

let $sessinfo := util:base64-encode(concat(request:get-parameter('user', ()), ":", request:get-parameter('pass', ())))

шаг 2: во время сборки страницы результатов в xQuery мы превращаем ее в переменную javascript с помощью простой команды script, помещенной в тег :

<script>
    var sessinfo = "{$sessinfo}";
</script>

шаг 3: в Javascript, загруженном вместе со страницей (мы используем jQuery), после того, как страница готова, мы устанавливаем аутентификацию для всех запросов AJAX:

jQuery.ajaxSetup({
  headers: {
    "Authorization": "Basic " + sessinfo
  }
});

После этого любой сделанный запрос AJAX отправляет заголовок базовой аутентификации с пользователем и паролем в другие xQueries, выполняемые с jQuery.ajax

0 голосов
/ 08 сентября 2018

Чтобы сеанс eXistdb работал с XHR (запросы Ajax), необходимо убедиться, что

login:set-user('my.login.domain', (), false())

вызывается в контроллере до того, как вы отправите его в ваш обработчик запросов. В противном случае все запросы будут исходить от гостевого пользователя.

Если вы хотите использовать ванильные / нативные запросы JavaScript, например, fetch Вы также должны указать это, чтобы добавить учетные данные к запросу:

fetch(url, { credentials: 'same-origin', method: 'GET' })

Кстати, постоянный вход в систему, используемый в exidtb-login, вероятно, использует значение cookie для получения переменных сеанса, хранящихся на сервере (JSESSIONID), но мне нужно это проверить.

0 голосов
/ 03 сентября 2018

Я думаю, что вы можете добавить пользователя и пароль в URI, чтобы запустить клиент Ajax для выполнения основных задач. например http://username:password@your -server / некоторые / URI / модули / uploader.xql

...