使用Ajax调用在Exist-DB中创建数据库条目

问题描述 投票:0回答:3

在开发一个自包含的exists-db应用程序时,我遇到了在ajax调用期间传递用户身份的一些问题。

我创建了一个标准页面,允许用户使用他或她的标准exists-db帐户登录。 (它或多或少基于这个https://github.com/eXist-db/existdb-login)。

在某些时候,用户需要创建自己的条目并上传文件,这是通过ajax脚本完成的(我使用的是Kartik的bootstrap上传器,但它基本上是一个标准的ajax上传功能):

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

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

        fileActionSettings : {
            uploadExtraData() {

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

                }
            }
        },
    });  

现在,当然,这将失败,因为它看起来像GUEST用户正在尝试创建条目,这是仅允许注册用户的操作。

exists-db是否允许在此时发送我的登录凭据,而不必诉诸标准HTTP登录(这是有问题的,因为这意味着创建一个cookie来记住密码,这或多或少地呈现整个登录的起诉存在的机制无用),或者有没有办法使用控制器而不是外部脚本?

提前致谢!

ajax xquery exist-db
3个回答
0
投票

我认为您可以将用户和密码添加到URI中以触发Ajax客户端执行基本操作。例如http://username:password@your-server/some/uri/modules/uploader.xql


0
投票

对于简单的基本身份验证,我们执行以下操作,因为页面本身是从xQuery提供的。

第1步:我们在页面xQuery中创建一个包含会话信息的变量。这对您来说应该没问题......您登录的结果将是一个HTML页面:

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

第2步:在xQuery中构建结果页面期间,我们通过放置在标记中的简单script命令将其转换为javascript变量:

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

第3步:在Javascript中加载页面(我们使用jQuery),在页面准备就绪后,我们为所有AJAX请求设置身份验证:

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

之后,任何AJAX请求都会将带有用户和密码的基本身份验证标头发送到使用jQuery.ajax执行的其他xQueries


0
投票

要让eXistdb会话与XHR(Ajax请求)一起工作,您需要确保

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

在将其转发给请求处理程序之前,在控制器中调用它。否则,所有请求似乎都来自“访客”用户。

如果您想使用vanilla / native JavaScript请求,例如fetch您还需要告诉它将凭据添加到请求中:

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

顺便说一句,exidtb-login中使用的持久登录可能使用cookie值来获取存储在服务器上的会话变量(JSESSIONID),但我需要检查它。

© www.soinside.com 2019 - 2024. All rights reserved.