使用Ajax调用在Exist DB中创建数据库项

使用Ajax调用在Exist DB中创建数据库项,ajax,xquery,exist-db,Ajax,Xquery,Exist Db,在开发一个自包含的eXistDB应用程序时,我在ajax调用期间传递用户身份时遇到了一些问题 我创建了一个标准页面,允许用户使用其标准的exist db帐户登录。(这或多或少是基于此) 在某些情况下,用户需要创建自己的条目并上传文件,这是通过ajax脚本完成的(我使用Kartik的bootstrap uploader,但它基本上是一个标准的ajax上传功能): 现在,当然,这将失败,因为它将显示为来宾用户正在尝试创建条目,这是一个仅允许注册用户执行的操作 exist db是否允许在此时发送我的登

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

我创建了一个标准页面,允许用户使用其标准的exist db帐户登录。(这或多或少是基于此)

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

现在,当然,这将失败,因为它将显示为来宾用户正在尝试创建条目,这是一个仅允许注册用户执行的操作

exist db是否允许在此时发送我的登录凭据,而不必求助于标准HTTP登录(这是有问题的,因为这意味着创建一个cookie来记住密码,这或多或少会使整个登录使用exist的机制变得无用),或者有没有办法使用控制器而不是外部脚本


提前谢谢

我认为可以将用户和密码添加到URI中,以触发Ajax客户端执行basic操作。e、 g.

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

步骤1:我们在页面xQuery中创建一个包含会话信息的变量。这对你来说应该很好。。。登录的结果将是一个HTML页面:

let $sessinfo := util:base64-encode(concat(request:get-parameter('user', ()), ":", request:get-parameter('pass', ())))
步骤2:在xQuery中构建结果页面的过程中,我们通过放置在标记中的一个简单的
脚本
命令将其转换为javascript变量:


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

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

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

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

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

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

let $sessinfo := util:base64-encode(concat(request:get-parameter('user', ()), ":", request:get-parameter('pass', ())))
<script>
    var sessinfo = "{$sessinfo}";
</script>
jQuery.ajaxSetup({
  headers: {
    "Authorization": "Basic " + sessinfo
  }
});